关闭

TCP/UDP 常见的错误码

2731人阅读 评论(0) 收藏 举报

在实际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通知应用程序。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:293859次
    • 积分:4219
    • 等级:
    • 排名:第7269名
    • 原创:112篇
    • 转载:11篇
    • 译文:0篇
    • 评论:120条
    最新评论