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

当send()/recv()失败时。插座放在哪里?,c,sockets,networking,send,recv,C,Sockets,Networking,Send,Recv,假设我有一个通过socket()系统调用创建的套接字。之后,我做了一个connect(),并开始发送和接收数据 类似地,在另一端,使用socket()系统调用创建了一个套接字,然后调用了bind(),listen()和accept()。然后这一方也开始沟通 现在让我们假设一个send()(相应地,另一侧的recv())失败 我想知道的是,在发生故障后,该套接字将位于何处 要再次通信,我应该再次创建套接字并执行connect()(bind(),listen()和accept(),在另一侧)还是可以

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

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

现在让我们假设一个
send()
(相应地,另一侧的
recv()
)失败

我想知道的是,在发生故障后,该套接字将位于何处

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


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

怎么做完全取决于
send
recv
失败的原因

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


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

然后,从断开的网络中恢复将导致检查所有返回值,然后检查相应的步骤?@Haris您最可能要检查的是
send
是否返回-1和
errno
ECONNRESET
。对于任何其他值,请安全地重试。确定。谢谢这很有帮助。