假设我有一个由socket()
系统调用创建的套接字。之后,我做了一个connect()
并开始发送和接收数据。
同样,在另一端,使用 socket()
系统调用创建了一个套接字,然后调用了 bind()
、 listen()
和 accept()
。然后这边也开始沟通了。
现在让我们假设其中一个send()
(因此recv()
在另一端)失败。
失败后,我想让插座站在哪里?
要再次通信,我应该再次创建套接字并执行connect()
(另一端bind()
,listen()
和accept()
),还是可以尝试send()
并再次recv()
?此外,在这种情况下最好的办法是什么?
注意:我们不知道send()
/recv()
失败的原因是什么。它可以是任何东西,从物理断线到另一方拒绝(可能使用 iptables)。
该怎么做完全取决于send
或recv
失败的原因。
检测到错误时,请检查 errno
的值以确定原因。 例如,如果错误代码EAGAIN
您将再次尝试该操作,如果错误代码ECONNRESET
则需要重新连接。
send
和recv
手册页,有关可能返回哪些错误以及应如何处理这些错误的详细信息,请参见手册页。