返回信息流是一个高并发的消息服务器,所以是non-blocking的socket。
比如要发1000个字节(len),现在的问题是会出现 ret = send(fd, buf, len); 返回了600个字节,就是只成功了一部分。
1)如果程序立即发剩余的,基本都是失败。
2)能不能让send要么全发送,要么就一个字节也不发送?
多谢。
这是一条镜像帖。来源:北邮人论坛 / mobile-internet / #5719同步于 2014/3/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileInternet机器人发帖
关于tcp非阻塞send的问题
youngfool
2014/3/22镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
可以加个循环,while(totalSendedSize < 1000) {function_send();}直到1000个字节发送为止,因为网络状况不可靠,你要求的这个不能完全保证成功。
send成功也只是表示要发送的数据都写到了本地的SOCKET缓冲区里,并不代表对端已经正确收到数据,而缓冲区大小是一定的,因此我不认为能实现LZ (2)中说的要求。
如果经验上认为(1)总是会出现,那么还不如直接返回失败,不要再send:
sent_size = send();
if( sent_size < total_size )
{
//重试,或者直接报告网络错误返回。
}