当send()/ recv()失败时。插座在哪里?

时间:2016-05-20 12:24:40

标签: c sockets networking send recv

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

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

现在让我们假设其中一个send()(以及另一方的recv())失败。

我希望失败后套接字在哪里?

要再次进行通信,我是否应该再次创建套接字并在另一边connect()bind()listen()accept())或者我可以尝试{{1再次和send()?此外,在这种情况下,最好的做法是什么?

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

1 个答案:

答案 0 :(得分:2)

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

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

请参阅sendrecv的手册页,详细了解可能会返回哪些错误以及您应该如何处理这些错误。