1.建立socket2.将该socket设置为非阻塞模式3.调用connect()4.使用select()检查该socket描述符是否可写(注意,是可写)5.根据select()返回的结果判断connect()结果6.将socket设置为阻塞模式(如果你的程序不需要用阻塞模式的,这步就省了,一般情况下都是用阻塞模式的)
#include #include #define TIME_OUT_TIME 20 //connect超时时间20秒int main(int argc , char **argv){………………int sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd < 0) exit(1);struct sockaddr_in serv_addr;………//以服务器地址填充结构serv_addrint error=-1, len;len = sizeof(int);timeval tm;fd_set set;unsigned long ul = 1;ioctl(sockfd, FIONBIO, &ul); //设置为非阻塞模式bool ret = false;if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1){tm.tv_set = TIME_OUT_TIME;tm.tv_uset = 0;FD_ZERO(&set);FD_SET(sockfd, &set);if( select(sockfd+1, NULL, &set, NULL, &tm) > 0){getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);if(error == 0) ret = true;else ret = false;} else ret = false;}else ret = true;ul = 0;ioctl(sockfd, FIONBIO, &ul); //设置为阻塞模式if(!ret){close( sockfd );fPRintf(stderr , "Cannot Connect the server!n");return;}fprintf( stderr , "Connected!n");//下面还可以进行发包收包操作
}
新闻热点
疑难解答