設定非阻塞方式連線

2021-06-20 02:02:29 字數 887 閱讀 7609

//設定非阻塞方式連線

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