学做粤菜的网站有哪些,网站开发三大框架,保定网站建设方案推广,阿里云网站建设里云官网模版在之前的文章中#xff0c;我们在Windows下玩过带有超时时间的#xff0c;本文我们在linux下来玩。在某次面试中#xff0c;还被遇到了这个问题#xff0c;有意思。直接上客户端代码#xff1a;#include #include #include #include #include #include #include #include …在之前的文章中我们在Windows下玩过带有超时时间的本文我们在linux下来玩。在某次面试中还被遇到了这个问题有意思。直接上客户端代码#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) // 注意输入参数, 带上ip和port{int sockClient socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addrSrv;addrSrv.sin_addr.s_addr inet_addr(argv[1]);addrSrv.sin_family AF_INET;addrSrv.sin_port htons(atoi(argv[2]));fcntl(sockClient, F_SETFL, fcntl(sockClient, F_GETFL, 0)|O_NONBLOCK);int iRet connect(sockClient, ( const struct sockaddr *)addrSrv, sizeof(struct sockaddr_in));printf(connect iRet is %d, errmsg:%s\n, iRet, strerror(errno)); // 返回-1不一定是异常if (iRet ! 0){if(errno ! EINPROGRESS){printf(connect error:%s\n, strerror(errno));}else{struct timeval tm {5, 0};fd_set wset, rset;FD_ZERO(wset);FD_ZERO(rset);FD_SET(sockClient, wset);FD_SET(sockClient, rset);int time1 time(NULL);int n select(sockClient 1, rset, wset, NULL, tm);int time2 time(NULL);printf(time gap is %d\n, time2 - time1);if(n 0){printf(select error, n is %d\n, n);}else if(n 0){printf(connect time out\n);}else if (n 1){if(FD_ISSET(sockClient, wset)){printf(connect ok!\n);fcntl(sockClient, F_SETFL, fcntl(sockClient, F_GETFL, 0) ~O_NONBLOCK);}else{printf(unknow error:%s\n, strerror(errno));}}else{printf(oh, not care now, n is %d\n, n);}}}printf(I am here!\n);getchar();close(sockClient);return 0;}服务端代码我们已经写过多次本文就不写了。经测试上述程序OK, 用tcpdump抓包还能学到不少东西比如SYN包重传RST包等。有点意思。总结以上就是这篇文章的全部内容了希望本文的内容对大家的学习或者工作具有一定的参考学习价值谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接