当 send()/recv() 失败时。插座在哪里?
When send()/recv() fails. Where does the socket stands?
假设我有一个由 socket()
系统调用创建的套接字。之后我做了 connect()
并开始发送和接收数据。
同样,在另一边,用socket()
系统调用创建了一个套接字,然后调用了bind()
、listen()
和accept()
。然后这边也开始交流了
现在让我们假设其中一个 send()
(相应地 recv()
在另一侧)失败了。
我想要什么失败后那个插座会站在哪里?
要再次通信,我应该重新创建套接字并在另一侧执行 connect()
(bind()
、listen()
和 accept()
)还是我可以尝试 send()
和 recv()
又一次?此外,在这种情况下最好的做法是什么?
注意: 我们不知道 send()
/recv()
失败的原因是什么。它可以是任何东西,从物理断线到另一方拒绝(可能使用 iptables)。
假设我有一个由 socket()
系统调用创建的套接字。之后我做了 connect()
并开始发送和接收数据。
同样,在另一边,用socket()
系统调用创建了一个套接字,然后调用了bind()
、listen()
和accept()
。然后这边也开始交流了
现在让我们假设其中一个 send()
(相应地 recv()
在另一侧)失败了。
我想要什么失败后那个插座会站在哪里?
要再次通信,我应该重新创建套接字并在另一侧执行 connect()
(bind()
、listen()
和 accept()
)还是我可以尝试 send()
和 recv()
又一次?此外,在这种情况下最好的做法是什么?
注意: 我们不知道 send()
/recv()
失败的原因是什么。它可以是任何东西,从物理断线到另一方拒绝(可能使用 iptables)。