我需要将套接字的read
的返回值强制为等于零而不关闭连接。
我在一个页面中读到以下声明:
如果收到文件结束条件或关闭连接,则返回0。
但是我不知道如何在我发送的字符串之后让它接收到这个条件。
有人可以帮忙吗?
答案 0 :(得分:2)
我担心你不能这样做。
如果希望read
返回零,则需要关闭套接字。如果您不想关闭套接字,则需要在协议中发出“通信结束”或“消息结束”的信号。
这样做的常用方法是为每条消息添加长度前缀。这样接收方就知道它何时读取完整的消息并随意做任何事情。
答案 1 :(得分:1)
如果您希望对等方的read()或recv()返回零,则必须关闭套接字或将其关闭以进行输出。在任何一种情况下,你都不能发送任何其他东西。如果该约束不适合您,则必须修改您的要求,因为它没有意义。
答案 2 :(得分:1)
“文件结束条件”和“连接已关闭”条件都告诉接收方在此套接字上不能再接收数据。您无法通过发送一些魔法数据来模拟它。
除了在套接字上调用close
之外,您还可以在套接字上使用shutdown(2)
来关闭读取端或写入端。这可能在有限的情况下有所帮助,但在一般情况下则不然。
答案 3 :(得分:1)
也许您需要一些多路复用系统调用,如poll(2)。
您肯定需要阅读一些好的资料,例如Advanced Linux Programming或Advanced Unix Programming。
如果您需要TCP / IP传输来传输应用程序消息,您需要自己关心打包和分段(通过使用固定大小的消息,或者通过某种方式知道传输过程中的逻辑消息大小)。请注意,TCP / IP传输可能会被网络分段。