//設定非阻塞方式連線
unsigned long ul = 1;
ret = ioctlsocket(cclient, fionbio, (unsigned long*)&ul);
if(ret==socket_error)return 0;
//連線
server.sin_family = af_inet;
server.sin_port = htons(25);
server.sin_addr .s_addr = inet_addr((lpcstr)psmtp);
if(server.sin_addr.s_addr == inaddr_none)
connect(cclient,(const struct sockaddr *)&server,sizeof(server));
//select 模型,即設定超時
struct timeval timeout ;
fd_set r;
fd_zero(&r);
fd_set(cclient, &r);
timeout.tv_sec = 15; //連線超時15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
//一般非鎖定模式套接比較難控制,可以根據實際情況考慮 再設回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cclient, fionbio, (unsigned long*)&ul1);
if(ret==socket_error){
::closesocket (cclient);
return 0;
unix linux socket設定非阻塞
uniix linux下socket主要是同步的,但有阻塞和非阻塞兩種方式。阻塞方式定義與前面定義相同,要解決阻塞有兩種方法 一種是設定socket屬性,設定為非阻塞 fcntl 函式 sockfd socket af inet,sock stream,0 fcntl sockfd,f setfl,...
非阻塞socket 的連線
方案1 int connect socket timeout int sockfd,char dest host,int port,int timeout else memcpy address.sin addr,host h addr list 0 sizeof address.sin addr ...
Socket實現非阻塞連線
include include include include pragma comment lib,ws2 32.lib define time out time 20 connect超時時間20秒 void geturl char url socket sockfd struct sockadd...