眾所周知,在進行網路程式設計的時候,如果使用系統connect函式,無法設定超時,而在連線乙個不存在的主機時,將會一直阻塞。
其實在呼叫connect函式時,將控制代碼設定為非阻塞,然後呼叫select函式,可以達到設定超時的效果。
[cpp]view plain
copy
print?
bool connect(char *host,int port, int timeout)
if(connect(sock,(struct sockaddr *)&address,sizeof(address))==false)
// restart the socket mode
imode = 0;
iresult = ioctlsocket(sock, fionbio, &imode);
if (iresult != no_error)
fd_set write, err;
fd_zero(&write);
fd_zero(&err);
fd_set(sock, &write);
fd_set(sock, &err);
// check if the socket is ready
select(0,null,&write,&err,&timeout);
if(fd_isset(sock, &write))
return
false;
}
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...
socket connect 函式設定超時
眾所周知,在進行網路程式設計的時候,如果使用系統connect函式,無法設定超時,而在連線乙個不存在的主機時,將會一直阻塞。其實在呼叫connect函式時,將控制代碼設定為非阻塞,然後呼叫select函式,可以達到設定超時的效果。cpp view plain copy bool connect ch...