免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4639 | 回复: 10

connect如何能让它在失败之后再次成功?(高手解答一下) [复制链接]

论坛徽章:
0
发表于 2011-10-25 19:40 |显示全部楼层
目前,公司的一个抓图传输模块里面,大概如下代码:
send_data()
{
       socket_create();
       sethandleblock();
       send_n();
}
这是一个单进程的程序,但是为什么,如果一口气频繁传输比如20张图片,也就是要调用send_data函数20次,并成功返回才达到目的。
现在我的问题就是:往往会出现在socket_create();函数时候,进行socket创建以及连接的时候出现问题,也就是具体的connect函数的时候,偶尔会出现失败,而且很多时候是程序第一次传输图片的时候失败。不知道哪位高手解答一下。
我之前想:如果是这样,我返回去,再进行一次socket_create()函数的调用,但是发现还是很不理想,是不是需要connect失败,休眠几毫秒?

论坛徽章:
0
发表于 2011-10-25 20:22 |显示全部楼层
socket编程没这个要求。

但是实际情况,最好加入随机等待。
因为有可能服务器拒绝了你,
你还拼命去连,然后就被服务器当作dos攻击者了。

论坛徽章:
0
发表于 2011-10-25 21:42 |显示全部楼层
connect失败后的errno是什么?Timeout了吗?

论坛徽章:
0
发表于 2011-10-25 22:02 |显示全部楼层
回复 1# wohenry84
connect这个函数会超时重传,从原理上讲不存在连接失败。
因为它有超时重传机制,怎么可能失败?

论坛徽章:
0
发表于 2011-10-25 22:23 |显示全部楼层
回复 3# lyb62


   
这个忘记打印了,还真应该把它打印出来,我明天去公司打印看看是什么连接出错。

论坛徽章:
0
发表于 2011-10-25 22:24 |显示全部楼层
回复 4# wangzhen11aaa


    那这么说的话,为什么有时候connect的返回值会有-1的出现呢?

论坛徽章:
0
发表于 2011-10-25 22:42 |显示全部楼层
本帖最后由 wangzhen11aaa 于 2011-10-25 22:51 编辑

在inet层:
typedef enum {
SS_FREE = 0,  /*没有分配*/
SS_UNCONNECTED,/* 从这里以下三个状态都是正常的*/
SS_CONNECTING,
SS_CONNECTED,
SS_DISCONNECTING /*未连接中*/
} socket_state;
其他的就是返回-EINVAL.
在tcp层:
如果
sk->state != TCP_CLOSE 返回错误 -EISCONN
各种错误。但是
在超时传输上,connect我没有看到超时终止的。

论坛徽章:
0
发表于 2011-10-25 22:52 |显示全部楼层
回复 1# wohenry84
你如何知道是在connect过程中失败的。跟踪了?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-10-25 23:08 |显示全部楼层
回复  wangzhen11aaa


    那这么说的话,为什么有时候connect的返回值会有-1的出现呢?
wohenry84 发表于 2011-10-25 22:24



    man connect

论坛徽章:
0
发表于 2011-10-25 23:19 |显示全部楼层
回复 8# wangzhen11aaa


    那代码是if(-1 == connect())的判断呀。如果不是的话,那怎么确定是怎样的问题呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP