【发布时间】:2012-05-16 15:13:57
【问题描述】:
标题几乎说明了一切。我有一个接收线程等待来自客户端的输入,但是当没有读取任何内容时,它没有返回读取的 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。
【问题讨论】:
-
你如何确定没有返回错误?
-
WSAGetLastError在这种情况下是你的朋友。值为 0 表示连接已关闭。任何 > 0 的值都是读取的字节数。调用WSAGetLastError()来确定原因。 -
-1是SOCKET_ERROR的值,当失败时从recvfrom()返回。使用WSAGetLastError()确定失败的原因。 -
有什么理由直接使用 WinSock 而不是 Boost.Asio?
-
由于公司要求,我正在使用 WinSock
标签: c++ network-programming udp winsock