我正在使用 ioctlsocket() 函数使我的套接字成为非阻塞的,但是当我调用 recvfrom() 时,我收到错误 10035 (WSAEWOULDBLOCK
)。
u_long mode = 1;
ioctlsocket(newSocketIdentifier, FIONBIO, &mode);
while(1)
{
if((recv_len = recvfrom(newSocketIdentifier, receiveBuffer, sizeof(receiveBuffer), 0, (struct sockaddr *) &clientSocket, &clientSocketLength)) == SOCKET_ERROR)
{
char err[128];
itoa(WSAGetLastError(),err,10);
MessageBox( NULL,"Could not Receive Data",err,MB_ICONINFORMATION);
BREAK;
}
}
谁能解释为什么会这样? :(
最佳答案
如果没有可用数据,这是正常的。代码是 WSAEWOULDBLOCK(请参阅此表),这意味着在阻塞端口上,函数必须等待直到它可以被服务。
while(1)
{
if((recv_len = recvfrom(newSocketIdentifier, receiveBuffer, sizeof(receiveBuffer), 0, (struct sockaddr *) &clientSocket, &clientSocketLength)) == SOCKET_ERROR)
{
int ierr= WSAGetLastError();
if (ierr==WSAEWOULDBLOCK) { // currently no data available
Sleep(50); // wait and try again
continue;
}
// Other errors
char err[128];
itoa(ierr,err,10);
MessageBox( NULL,"Could not Receive Data",err,MB_ICONINFORMATION);
break;
}
}
关于c - recvfrom() 错误 10035 使用非阻塞套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17064069/