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时给错了地址。。。