调用recv,若是对方没有数据过来就阻塞住了。只有下面状况才会返回:
a. 对方向你发送了数据;
b. 对方关闭了链接。
建议用异步 socket或同步非阻塞socket,用select肯定什么时候数据到达。windows
.异步
很是感谢~~如今我是移植到windows上,select不能用吧,再就是我用以下的方法设置非阻塞对吧,
flags = 1;
ioctlsocket(svr_conn, FIONBIO, &flags);
n = recv(svr_conn, &rst, 1, 0);
可是我这样设置以后recv()返回值n为-1?仍是没有读取成功呢?而后就不知道再怎么改了···
引用 2 楼 的回复:
调用recv,若是对方没有数据过来就阻塞住了。只有下面状况才会返回:
a. 对方向你发送了数据;
b. 对方关闭了链接。socket
建议用异步 socket或同步非阻塞socket,用select肯定什么时候数据到达。同步
WSAAsyncSelect(ServerSock, m_hWnd, NETWORK_EVENT, FD_ACCEPT | FD_CLOSE | FD_READ | FD_WRITE)
非阻塞设置io