【发布时间】:2012-09-13 14:35:26
【问题描述】:
我正在使用TCP/IP 和sockets 在c++ 中编写一个分布式系统。
对于我的每条消息,我需要接收前 5 个字节才能知道传入消息的完整长度。
最好的方法是什么?
-
recv()只有 5 个字节,然后又是recv()。如果我选择这个,假设我会在 recv 中获得 0 或 5 个字节是否安全(也就是不写循环继续尝试)? - 使用
MSG_PEEK -
recv()一些更大的缓冲区大小,然后读取前 5 个字节并分配最终缓冲区。
【问题讨论】:
-
除非您处于非阻塞模式,否则您不会得到零字节。 recv() 结果为零表示 EOS,流结束,因此您通常应该关闭套接字。
标签: c++ sockets network-programming