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