【发布时间】:2012-06-17 00:39:10
【问题描述】:
我正在用 c++ 开发服务器,当我在 while 循环中使用 recv() 时,它返回所有时间长度 -1 并且继续循环而不阻塞。
while(true)
{
char buffer[1024];
int dataLength = recv(socket, buffer, 1024, 0)
cout << dataLength;
}
输出:-1-1-1-1-1-1-1-1-1.............
有谁知道如何让这个套接字阻塞直到它接收到数据?
提前致谢!
【问题讨论】:
-
WSAGetLastError 返回什么?
-
在下面答案给出的线程的帮助下,我设法打印出 WSAGetLastError 并返回 10057
-
WSAENOTCONN 10057 (0x2749) A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied.- System Error Codes - 学会爱他们。 -
谢谢,但我使用的是 tcp 和数据报套接字;s udp 否?我的套接字是这样构造的 Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);。顺便说一句,客户端在 c# 中使用 TcpClient 可能存在竞争问题?
-
因为这是一个服务器套接字,你必须调用
accept(),然后你在accept()返回的SOCKET上调用recv()。不要在收听SOCKET时打电话给recv()。