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

时间:2012-05-16 15:13:57

标签: c++ network-programming udp winsock

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

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

由于

编辑:

这是接收代码

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。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

WSAGetLastError()返回recvfrom()时,

SOCKET_ERROR不应返回0。这表明你可能在两个调用之间做了一些事情,这些调用间接地清除了WinSock的错误代码,然后才能阅读它。

另外,在致电sockaddr_in之前,您无需填写recvfrom()。它会为sockaddr_in填写有关发件人的信息。无论recvfrom()需要执行什么信息,都可以从SOCKET句柄获取作业。