64,639
社区成员
发帖
与我相关
我的任务
分享
可以用setopt将socket的发送缓冲设置成只有一个字节,同步阻塞send,再设置发送超时,这样没有真正发送完,send是不会返回的。查下setsockopt函数的各个参数和用法。应该可以实现你想要的。
[quote=引用 5 楼 max_min_ 的回复:] 检查返回值吧,网络断开了发送应该是立刻返回错误的send返回值应该是-1,errno应该是bad descript
检查返回值吧,网络断开了发送应该是立刻返回错误的send返回值应该是-1,errno应该是bad descript
[quote=引用 2 楼 beMyBest 的回复:] [quote=引用 1 楼 jerry_dqh 的回复:] 业务需要自己检测网络是否完好,client,serve之间可以使用心跳等检测, 对于send直接返回,数据首先提交送到系统协议栈中,所以直接返回,但这时并不代表数据立即被发送了,系统,网卡可能都还没有将数据发出去,但是数据应该处于待发送的状态了。 如果断线情况下发送一个消息,三分钟后网络重新链接上,断线情况下发送的消息对端在此时能收到么? 》》你使用的tcp,还是udp发送。如果使用tcp,数据对端可能还是收到的,因为数据缓存在本端的栈中。
[quote=引用 1 楼 jerry_dqh 的回复:] 业务需要自己检测网络是否完好,client,serve之间可以使用心跳等检测, 对于send直接返回,数据首先提交送到系统协议栈中,所以直接返回,但这时并不代表数据立即被发送了,系统,网卡可能都还没有将数据发出去,但是数据应该处于待发送的状态了。 如果断线情况下发送一个消息,三分钟后网络重新链接上,断线情况下发送的消息对端在此时能收到么? 》》你使用的tcp,还是udp发送。如果使用tcp,数据对端可能还是收到的,因为数据缓存在本端的栈中。
业务需要自己检测网络是否完好,client,serve之间可以使用心跳等检测, 对于send直接返回,数据首先提交送到系统协议栈中,所以直接返回,但这时并不代表数据立即被发送了,系统,网卡可能都还没有将数据发出去,但是数据应该处于待发送的状态了。 如果断线情况下发送一个消息,三分钟后网络重新链接上,断线情况下发送的消息对端在此时能收到么? 》》你使用的tcp,还是udp发送。如果使用tcp,数据对端可能还是收到的,因为数据缓存在本端的栈中。