繁体   English   中英

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

[英]When send()/recv() fails. Where does the socket stands?

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

类似地,另一方面,使用socket()系统调用创建了一个socket() ,然后调用了bind()listen()accept() 然后这边也开始交流。

现在,假设send() (以及另一端的recv() )失败了。

发生故障后,我想将那个插座停在哪里?

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

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

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

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

有关可能返回的错误以及应采取的措施的更多详细信息,请参见sendrecv的手册页。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM