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)

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