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