0

我需要在关闭连接的情况下强制read从套接字返回值等于零。

我在一页中读到以下声明:

如果接收到文件结束条件或连接关闭,则返回 0。

但我不知道如何让它在我发送的字符串之后接收到那个条件。

任何人都可以帮忙吗?

4

4 回答 4

2

恐怕你做不到。

如果要read返回零,则需要关闭套接字。如果您不想关闭套接字,则需要将“通信结束”或“消息结束”作为协议的一部分发出信号。

一种常见的方法是在每条消息前面加上它的长度。这样,接收方就知道何时阅读了完整的消息并对其进行任何操作。

于 2012-10-27T09:13:06.250 回答
1

如果您希望对等方的 read() 或 recv() 返回零,则必须关闭套接字或将其关闭以进行输出。无论哪种情况,您之后都无法发送任何其他内容。如果该约束不适合您,您将不得不修改您的要求,因为它没有意义。

于 2012-10-27T09:16:09.063 回答
1

“文件结束条件”和“连接关闭”条件都告诉接收者在这个套接字上不能再接收数据了。您无法通过发送一些魔术数据来模拟它。

除了调用close套接字之外,您还可以shutdown(2)在套接字上使用仅关闭读取端或写入端。这可能在有限的情况下有所帮助,但在一般情况下没有帮助。

于 2012-10-27T09:16:19.297 回答
1

也许你需要一些像poll(2)这样的多路复用系统调用。

你肯定需要阅读一些好的材料,比如Advanced Linux ProgrammingAdvanced Unix Programming

如果您需要 TCP/IP 传输来传输应用程序消息,您需要自己明确地关心打包和分段(通过具有固定大小的消息,或者通过某种方式在传输过程中了解逻辑消息大小)。请注意,TCP/IP 传输可能会被网络分段。

于 2012-10-27T10:03:27.673 回答