2

标题基本概括了所有内容。我有一个接收线程等待来自客户端的输入,但是当没有读取任何内容时,它没有返回读取的 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。

4

2 回答 2

2

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

于 2012-05-16T15:47:23.987 回答
2

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

附带说明,您无需填写sockaddr_inbefore call recvfrom()。它会为您填写sockaddr_in有关发件人的信息。无论recvfrom()需要执行什么信息,工作都是从SOCKET句柄中获取的。

于 2012-05-16T17:55:34.487 回答