socket connect 阻塞與非阻塞

2021-06-05 09:53:45 字數 870 閱讀 1006

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...