socket函式生成socket結構體時,預設生成的socket是阻塞的~如果我們使用connect去連線伺服器,而這時網路出現故障,則connect預設等候很長一段時間然後返回錯誤~
我們可以設定socket為非阻塞模式,可以設定一定的等候時間,如果在設定的等候時間內connect失敗,則我們判定網路出現故障~~
下面我們來描述有關非阻塞socket的有關**:
struct sockaddr_in dest_sin;
socket sock;
int flag = 1;
struct timeval timeout;
fd_set r;
int ret;
int error;
int len = sizeof(int);
sock = socket(af_inet, sock_stream, 0);
if (ioctlsocket(sock,fionbio,&flag) != 0) //設為非阻塞模式,這裡flag為1,可以檢視相關函式
err = connect(sock, (psockaddr) & dest_sin, sizeof(dest_sin));
if (socket_error == err)
else
}else
} else
if (!ret)
fprintf(stderr , "connected\n");
flag = 0;
if (ioctlsocket(sock,fionbio,(unsigned long*)&flag) == socket_error) /** 轉為阻塞模式,flag = 0*/
socket connect 函式設定超時
眾所周知,在進行網路程式設計的時候,如果使用系統connect函式,無法設定超時,而在連線乙個不存在的主機時,將會一直阻塞。其實在呼叫connect函式時,將控制代碼設定為非阻塞,然後呼叫select函式,可以達到設定超時的效果。cpp view plain copy print?bool conn...
socket connect函式理解
1 connect描述 定義函式 int connect int sockfd,struct sockaddr serv addr,int addrlen connect函式通常用於客戶端建立tcp連線。返回值 成功則返回0,失敗返回 1,錯誤原因存於errno中。錯誤 ebadf 引數sockfd...
socket connect函式理解
1 connect描述 定義函式 int connect int sockfd,struct sockaddr serv addr,int addrlen connect函式通常用於客戶端建立tcp連線。引數 sockfd 標識乙個套接字。serv addr 套接字s想要連線的主機位址和埠號。add...