Windows UDP recvfrom 不能阻塞 及 bind 报错的解决办法

1、正常来说,UDP的recvfrom默认是阻塞的。

可以手动设置是否为阻塞

u_long iMODE = 0;//1为非阻塞,0为阻塞
ioctlsocket(udp_cliSocket, FIONBIO, &iMODE);//设置recvfrom是否为阻塞

ioctlsocket的第一个参数为socket套接字。

此处我设置为0,依然会不阻塞。

2、如果bind失败了,也会导致recvfrom不阻塞。

if (bind(udp_cliSocket, (SOCKADDR*)&locAddr, sizeof(locAddr)) == SOCKET_ERROR)
{
    printf("UDP bind ERROR :%d\n", WSAGetLastError());
		
}

如果bind=SOCKET_ERROR时,说明bind失败,通过WSAGetLastError获取报错信息为10049——不能分配请求的地址。

再次检查前面的代码,发现添加本地ip时给错了地址。。。

猜你喜欢

转载自blog.csdn.net/Hilaph/article/details/107235158