c select()读取直到null字符

时间:2012-09-16 03:48:45

标签: c sockets proxy

我在c中实现代理,并且使用select()来阻止I / O.有多个客户端连接到代理,因此我在我的消息中包含套接字描述符#,以便我知道从服务器转发回复消息的套接字。

但是,有时read()不会收到空字符的完整消息,但会在下一轮select()中发送剩余的消息。我想立即收到完整的消息,以便我知道将回复转发到哪个套接字(缓冲不起作用,因为当有多个客户端时我不知道哪个消息属于哪个消息)。有没有办法在等待空字符到达时不会阻塞读取?

2 个答案:

答案 0 :(得分:7)

TCP中没有消息。它是字节流协议。你写字节,它发送字节,你读取字节。无法保证在任何时候您将接收多少字节,并且在单次读取和单次读取读取的数据量之间没有保证关联。如果你想要消息,你必须自己实现它们。任何给定的读取都可以读取零个,一个或多个字节,直到缓冲区的长度。这可能是半个消息。它可能是一个半消息。它完全取决于你。

答案 1 :(得分:0)

如果您正在处理个别消息,请使用ZeroMQ。它具有大量语言的绑定,是网络的一个很好的抽象。实际上,它可以为您处理这种代理模型。