1.调用ioctlsocket函数进行阻塞和非阻塞控制:
unsigned long flag=1; //1的时候为非阻塞,0的时候为阻塞 |
2.对于connect的连接问题,在connect之后,如果网络不好,ip地址无用,就会出现大概20及几多秒的时间等待。那怎么优化这个问题?
看下面的代码
timeval timeout ;//设置超时时间
fd_set fd;
int ret;
connect( sock, (sockaddr*)addr,sizeof(addr));
FD_ZERO(&fd);
FD_SET(sock,&fd);
timeout.tv_sec = 5;
timeout.tv_usec =0;
ret = select(0,0,&fd,0,&timeout);
if ( ret <= 0 )
{
closesocket(sock);
}
以下给出一些函数的意思:
int select (int maxfd + 1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const struct timeval * timeout);
参数一:最大的文件描述符加1。
参数二:用于检查可读性,
参数三:用于检查可写性,
参数四:用于检查
带外数据,
long tv_sec; // seconds
long tv_usec; // microseconds
}
返回值的含义:
>0:就绪描述字的正数目
-1:出错
0 :超时