标题几乎说明了一切。我有一个接收线程等待来自客户端的输入,但是当没有读取任何内容时,它返回-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。
答案 0 :(得分:2)
您可以尝试的另一件事是使用SO_ERROR
调用getsockopt()
来检查特定于套接字的错误(与任何线程套接字上的最后一个错误相比)。
答案 1 :(得分:2)
WSAGetLastError()
返回recvfrom()
时, SOCKET_ERROR
不应返回0。这表明你可能在两个调用之间做了一些事情,这些调用间接地清除了WinSock的错误代码,然后才能阅读它。
另外,在致电sockaddr_in
之前,您无需填写recvfrom()
。它会为sockaddr_in
填写有关发件人的信息。无论recvfrom()
需要执行什么信息,都可以从SOCKET
句柄获取作业。