免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1835 | 回复: 9
打印 上一主题 下一主题

我也问个select问题 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-16 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-10 14:41 |只看该作者 |倒序浏览
下面是我截取的代码,程序是客户端与服务端交互时接受服务端返回信息。send没有问题,故没有截取代码。
createconn是socket+connect的函数,3次都成功了,timeout设3秒。
问题是select每次返回0,是我得写法有问题,还是其他什么问题呢?不胜感激!!
我应
while(1)
        {
                maxcount++;
                if(maxcount>3)
                {
                        close(socket_fd);
                        return -1;
                }
                FD_ZERO(&set);
                FD_SET(socket_fd, &set);
                if((nfound=select(socket_fd+1,&set,NULL,NULL,&timeout))==-1)
                {
                        printf("main row:%d select error:%d!\n",__LINE__,errno);
                        return -1;
                }
                else if(nfound==0)
                        {
                                printf("main row :%d select time out !\n",__LINE__);
                                close(socket_fd);
                                if((socket_fd=createconn(socket_fd,&sckaddr))<0)
                                {
                                        printf("main->row:%d connect error:%d\n",__LINE__,errno);
                                        return -1;
                                }
                                else
                                {
                                        printf("main->row:%d connect okey!socket_fd:%d\n",__LINE__,socket_fd);
                                }
                                continue;
                        }
                else break;
        }

论坛徽章:
0
2 [报告]
发表于 2008-04-10 14:56 |只看该作者
3秒有点短吧, 要不把时间弄长点呢. 你对端是怎么处理连接的?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-16 06:20:00
3 [报告]
发表于 2008-04-10 15:12 |只看该作者
对端是短信网关,不知道具体怎么处理的。
现在改成60秒还是不行。。。。

论坛徽章:
0
4 [报告]
发表于 2008-04-10 15:14 |只看该作者
tcpdump抓包来看.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2008-04-10 15:20 |只看该作者
超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..超时值..

放在循环里边..每次都要重置

论坛徽章:
0
6 [报告]
发表于 2008-04-10 15:24 |只看该作者
看来兄弟是吃过亏阿


这么激动,呵呵

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-16 06:20:00
7 [报告]
发表于 2008-04-10 15:25 |只看该作者
谢谢cookis 的提醒,确实是bug。但是问题还是没有解决。。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2008-04-10 15:34 |只看该作者
fd_set也需要重新定义

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-16 06:20:00
9 [报告]
发表于 2008-04-10 15:45 |只看该作者
我做的是个cngp协议的东东,跟短信网关有三步交互:login、submit、exit。
第一步login挺成功的,返回的正是想要的东西。接着submit时send看返回值也没有问题,要recv返回信息时一直取不到,就加了上面的代码,不过看来还是不行。
偶以前没做过,看来得好好学。。。
继续等各位的指正

论坛徽章:
0
10 [报告]
发表于 2008-04-10 15:49 |只看该作者
原帖由 net_robber 于 2008-4-10 15:24 发表
看来兄弟是吃过亏阿


这么激动,呵呵


刚用这个的时候俺就吃过这个亏
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP