我正在将我的网络代码从 Windows 移植到 Linux,但并非没有问题。出于某种原因,当我将套接字设置为非阻塞时,recvfrom 将无法正常工作。你看,在我调用 recvfrom 之后,errno 总是 EAGAIN,不管我收到多少数据包,它总是 EAGAIN。如果我注释掉将套接字设置为无阻塞的代码,则代码运行良好。那么它正在工作,但它正在阻止......
这是我用来将套接字设置为非阻塞的代码:
int nonBlocking = 1;
if ( fcntl( handle, F_SETFL, O_NONBLOCK, nonBlocking ) == -1 )
{
std::cout << "failed to set non-blocking socket" << std::endl;
return false;
}
关于我做错了什么的任何想法?(它在我的 Windows 版本中运行良好,使用:
DWORD nonBlocking = 1;
ioctlsocket( handle, FIONBIO, &nonBlocking );