繁体   English   中英

c select()读取直到空字符

[英]c select() reading until null character

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

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

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

如果要处理单个消息,请使用ZeroMQ。 它具有对多种语言的绑定,是网络的绝佳抽象。 实际上,它可以为您处理此代理模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM