博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
select 的问题
阅读量:6801 次
发布时间:2019-06-26

本文共 1728 字,大约阅读时间需要 5 分钟。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 13 int main(int argc, const char * argv[]) {14 int sock = socket(PF_INET, SOCK_STREAM, 0);15 if(sock == -1){16 const char* str = strerror(errno);17 printf("socket: %s\n", str);18 return -1;19 }20 21 int flags = fcntl(sock, F_GETFD, 0);22 flags |= O_NONBLOCK;23 fcntl(sock, F_SETFD, flags);24 25 char ch = 1;26 setsockopt(sock, IPPROTO_TP, TCP_NODELAY, &ch, sizeof(ch));27 int value = 1;28 setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, &value, sizeof(value));29 30 struct sockaddr_in addr = { 0};31 addr.sin_family = AF_INET;32 addr.sin_port = htons(8000);33 addr.sin_addr.s_addr = inet_addr("127.0.0.1");34 35 int ret = connect(sock, (struct sockaddr*)&addr, sizeof(addr));36 if(ret){37 int err = errno;38 if(err != EINPROGRESS && err != EWOULDBLOCK){39 const char* str = strerror(errno);40 printf("connect: %s\n", str);41 //return -1; // 注释掉这里,后面 select 返回 142 }43 44 int nfds = 0;45 fd_set wset;46 FD_ZERO(&wset);47 FD_SET(sock, &wset);48 nfds = sock + 1;49 50 struct timeval timeout;51 timeout.tv_sec = 1;52 timeout.tv_usec = 0;53 int n = select(nfds, 0, &wset, 0, &timeout);54 if(n > 0){55 struct sockaddr in = { 0};56 socklen_t len = sizeof(in);57 int e = getpeername(sock, &in, &len);58 if(e){59 int err = errno;60 printf("getpeername: %s\n", strerror(err));61 }62 }63 64 }65 66 return 0;67 }

select 一个 "connection refused" 的 socket, socket 居然状态可写。。

原代码用 select 检查 socket 的可写状态来判断连接是否成功,IOS 版本的代码中没有对 connect 返回值做检查,才发现这个现象。。

转载于:https://www.cnblogs.com/hangj/p/7493813.html

你可能感兴趣的文章
W3C发布DRM作为推荐方案
查看>>
前端计划——Codewars的一些JavaScript题集
查看>>
红帽论坛北京站召开 设立亚太开放创新实验室
查看>>
Spark生态顶级项目汇总
查看>>
EF Core 2.1路线图:视图、GROUP BY和惰性加载
查看>>
NetBeans在Apache基金会取得的进展
查看>>
Netflix实时流处理平台Keystone介绍
查看>>
一文带你快速读懂.NET CLI
查看>>
深入探索JVM自动资源管理
查看>>
实现TeX的算法:回首编程技术的过去三十年
查看>>
re:Invent大会第四天:为什么Lambda值得你更多关注?
查看>>
B端大数据应用的架构实践与思考
查看>>
Cascade:自动化测试“旅程”
查看>>
2018年十大云宕机事故盘点:主流无一幸免!
查看>>
美团开源实时监控系统 CAT 3.0 发布:多语言客户端及多项性能提升
查看>>
开源项目koa-router被叫卖,周下载10W+只要5000美元
查看>>
360首席安全官谭晓生宣布离职
查看>>
微软正式发布Azure Functions 2.0
查看>>
Swift 4.2进入最后开发阶段,为Swift 5铺平道路
查看>>
爱立信电信软件的持续交付
查看>>