假设我有一个由socket()
系统调用创建的套接字。之后,我做了一个connect()
并开始发送和接收数据。当send()/ recv()失败时。插座站在哪里?
同样,另一方面,用socket()
系统调用创建套接字,然后调用bind()
,listen()
和accept()
。然后这边也开始沟通。
现在让我们假设其中一个send()
(以及相应的recv()
)失败。
我想要在失败后插座的位置在哪里?
要再次沟通,我应该再创建套接字和(另一侧bind()
,listen()
和accept()
)做connect()
或者我可以再次尝试send()
和recv()
?另外,在这种情况下要做的最好的事情是什么?
注:我们不知道什么是对send()
/recv()
的原因失败。它可以是任何物理断线到另一侧拒绝(也许使用iptables)。
然后从破损的网络中恢复将导致检查所有返回值,然后相应地采取步骤? – Haris
@Haris最有可能检查的是'send'返回-1,'errno'是'ECONNRESET'。对于任何其他价值,再次尝试应该是安全的。 – dbush
好的。谢谢。这有帮助。 – Haris