关于recvfrom产生10054的错误

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

  

你可能感兴趣的:(windows,网络)