recvfrom 函数返回 -1,没有错误

recvfrom function returns -1 with no error

本文关键字:有错误 函数 返回 recvfrom      更新时间:2023-10-16

标题几乎说明了一切。我有一个接收线程等待来自客户端的输入,但是当什么都没有读取时,它不是返回 0 字节读取,而是返回 -1 但没有返回任何错误。

任何提示都必须说明为什么这个函数会表现得像这样?

谢谢

编辑:

这是接收代码

sockaddr_in remote;
remote.sin_family = AF_UNSPEC;
remote.sin_addr.s_addr = inet_addr( _host.c_str() );
remote.sin_port = htons( atoi( _port.c_str() ) );
int remoteSize = sizeof(remote);
bytesRead = recvfrom(_os.socket, 
    (char*)buffer, 
    bufferSize, 
    0,(SOCKADDR*)&remote, &remoteSize);
_error = WSAGetLastError();

当我执行时,bytesRead是 -1,_error是 0。

recvfrom()返回 SOCKET_ERROR 时,WSAGetLastError()不应该返回 0。 这表明您可能在两次调用之间执行了一些操作,这些操作在读取WinSock的错误代码之前间接清除了WinSock的错误代码。

附带说明一下,在调用recvfrom()之前,您无需填写sockaddr_in。 它会为您填写有关发件人的信息sockaddr_inrecvfrom()需要执行的任何信息都是从SOCKET句柄获取作业。

您可以

尝试的另一件事是使用 SO_ERROR 调用 getsockopt() 来检查特定于套接字的错误(相对于任何线程套接字上的最后一个错误)。