C语言 当 send()/recv() 失败时.插座站在哪里



假设我有一个由socket()系统调用创建的套接字。之后,我做了一个connect()并开始发送和接收数据。

同样,在另一端,使用 socket() 系统调用创建了一个套接字,然后调用了 bind()listen()accept()。然后这边也开始沟通了。

现在让我们假设其中一个send()(因此recv()在另一端)失败。

失败后,我想让插座站在哪里?

要再次通信,我应该再次创建套接字并执行connect()(另一端bind()listen()accept()),还是可以尝试send()并再次recv()?此外,在这种情况下最好的办法是什么?

注意:我们不知道send()/recv()失败的原因是什么。它可以是任何东西,从物理断线到另一方拒绝(可能使用 iptables)。

该怎么做完全取决于sendrecv失败的原因。

检测到错误时,请检查 errno 的值以确定原因。 例如,如果错误代码EAGAIN您将再次尝试该操作,如果错误代码ECONNRESET则需要重新连接。

有关

sendrecv手册页,有关可能返回哪些错误以及应如何处理这些错误的详细信息,请参见手册页。

最新更新