調用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