大俠們幫忙看一下,爲何我一到recv()就卡住了呢?

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

相關文章
相關標籤/搜索