recvfrom 10054之谜

众所周知,UDP通信是不需要提前建立连接的,只要bind后,直接recvfrom就可以了。但是写UDP转发时,发现其中一方重启后,UDP转发的接收就会失败一次。

查阅资料后发现是Winsock的Bug,在WinSock Recvfrom() 现在返回 WSAECONNRESET 代替阻止或超时(WSAIoctl中的SIO_UDP_CONNRESET参数)一文中有解释。只需要以下代码就可以解决:

int bNewBehavior = 0;
DWORD dwBytesReturned;
WSAIoctl(s, SIO_UDP_CONNRESET, &bNewBehavior, sizeof bNewBehavior, NULL, 0, &dwBytesReturned, NULL, NULL);

但是在VS2019中,找不到SIO_UDP_CONNRESET的定义,可能是Windows觉得这个Bug已经修复了?
#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章