搜索
bottom↓
回复: 7

linux下socket的send函数返回值的问题

[复制链接]

出0入0汤圆

发表于 2012-5-16 13:31:43 | 显示全部楼层 |阅读模式
如题,在linux系统下,建立tcp的socket以后,发送数据用send函数,但是现在有一个应用提出这样的问题,就是能不能保证send发送后,数据成功送出;现在我做的测试结果是send虽然返回了成功,但是有时未必真正发送成功,最好能够得到tcp的确认,但我查找了应用程序库里好像没有这样的函数,必须在驱动里改吗

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入42汤圆

发表于 2012-5-16 14:03:42 | 显示全部楼层
会自己重发吧,不用应用层关心这个的.除非连接断开了

出0入0汤圆

 楼主| 发表于 2012-5-16 15:36:03 | 显示全部楼层
不会自己重发的,现在我是应用层采用心跳确认机制来保证网络可靠性,但是有的客户希望不用回复心跳最好,那么我发送出去的包如果能够检测到tcp的确认是最理想的,现在没找到类似的函数

出0入0汤圆

 楼主| 发表于 2012-5-16 15:38:29 | 显示全部楼层
对了补充一句,就是防止连接异常断开的,比如 服务器突然拔掉网线,类似这种的情况,socket的recv函数不会立即检测到的,

出0入0汤圆

发表于 2012-5-16 19:03:22 | 显示全部楼层
dadongleilei 发表于 2012-5-16 15:38
对了补充一句,就是防止连接异常断开的,比如 服务器突然拔掉网线,类似这种的情况,socket的recv函数不会 ...

突然断开的情况,
有一些延时检测到,应该是可以接受的。

毕竟send后,
都是其它层来处理了,
如果加心跳,相当于要应用层来处理了,
这会不会有些乱呢?

出0入0汤圆

 楼主| 发表于 2012-5-17 09:07:31 | 显示全部楼层
我现在的机制就是应用层来加心跳检测,否则有时明明已经断开了,但是不会马上收到这个事件,有时要好几分钟才能检测到,这对一些要求实时在线的客户 是不大好接受的

出0入0汤圆

发表于 2012-5-17 11:02:43 | 显示全部楼层
可以用Select检测Error和Read事件, 如果Read为0,表示连接断开,Error出现也表示连接断开

出0入0汤圆

 楼主| 发表于 2012-5-17 12:27:32 | 显示全部楼层
恩 我现在是用select来做的,但是这个遇到网络突然断开这样的类似情况,不是马上就能给出提示,这是有数据send的话,函数返回是发送成功了,但是实际上数据丢掉了;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 16:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表