我在c中实现代理,并使用select()来阻止I/O. 有多个客户端连接到代理,因此我在我的消息中包含套接字描述符#,以便我知道从服务器转发回复消息的套接字.
但是,有时read()不会收到最多为空字符的完整消息,但会在下一轮select()中发送剩余的消息.我想立即收到完整的消息,以便我知道将回复转发到哪个套接字(缓冲将不起作用,因为当有多个客户端时我不知道哪个消息属于哪个消息).有没有办法在等待空字符到达时不会阻塞读取?
在TCP中没有消息这样的东西.它是字节流协议.你写字节,它发送字节,你读取字节.无法保证在任何时候您将接收多少字节,并且在单次读取和单次读取读取的数据量之间没有保证关联.如果你想要消息,你必须自己实现它们.任何给定的读取都可以读取零个,一个或多个字节,直到缓冲区的长度.这可能是半个消息.它可能是一个半消息.它完全取决于你.