TCP/UDP 常见的错误码

在实际TCP&UDP C/S数据收发过程中,常见error code有ECONNABORTED(WSAECONNABORTED),ECONNRESET(WSAECONNRESET),nonblocking io当然还有WOULDBLOCK(WSAWOULDBLOCK)。

 

1. ECONNABORTED(WSAECONNABORTED)

    这个tcp send引起的,一般是protocol stack重传超时或者protocol处理错误等。

 

2. ECONNRESET(WSAECONNRESET)

    对于TCP

          远程主机已强制关闭,发送数据,远程主机protocol stack回应RST。

    对于UDP

          在Windows系统上,双方正在进udp数据交互,另一端关闭了,发送方会收到“ICMP Port Unreached",protocol向上报WSAECONNRESET。这时应用层一般不做关闭动作(除非有特殊的需求),因为这仅仅另外一端的 UDP socket不存在了,本端的udp socket还是完全合法的。

          有一点要注意的是,在Linux上,应用层不会得到ECONNRESET。

 

3. WOULDBOCK(WSAWOULDBLOCK)

     对于nonblocking io,这个很常见了。发送数据的时候,socket sending buffer没有空间了,得到这error code。简单做法是稍后重试,更好的做法是采用select/epoll之类的机制,注册一个WRITE EVENT,当sending buffer有空间了,kernel通知应用程序。

你可能感兴趣的:(linux,windows,tcp,socket,IO,buffer)