http://blog.sina.com.cn/s/blog_536e955201009xqp.html
差点被这个问题给弄疯了,过程如下
UDP套接字A向本机一个端口发送数据,而这个端口没有套接字在接收,然后套接字A向另一个端口B发送数据,这个端口上有套接字在接收并在收到数据后立即向A返回一个数据,然后套接字A接收,此时套接字A就发疯鸟,返回SOCKET_ERROR,查看错误是10054。
说明:
这个是Windows的问题。
当UDP Socket在某次发送后收到一个不可到达的ICMP包时,这个错误将在下一个接收中返回。所以上面的套接字在下一次的接收中返回了SOCKET_ERROR,错误是10054
解决方法:
1 简单的忽略这个就可以了,对后续的调用没有影响。
2 BOOL bNewBehavior = FALSE;
DWORD dwBytesReturned = 0;
WSAIoctl(m_Sckt, SIO_UDP_CONNRESET, &bNewBehavior, sizeof bNewBehavior, NULL, 0, &dwBytesReturned, NULL, NULL);
p.s m_Sckt 是UDP SOCKET