socket send的返回值

liuscmail 2011-01-06 11:23:08
虽然看到很多文章,但是没有确定

send返回的数值是发送到客服端并且在tcp层得到确认之后的值吗?

还是send的返回值只是发送到client的内核缓冲区的可用空间里面之后,就返回了

还有就是,这个数值是否受非阻塞O_NONBLOCK,异步O_ASYNC socket操作的影响,具体怎么影响的那

期待高人解答啊
...全文
3601 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
changecode 2012-09-14
  • 打赏
  • 举报
回复
你到底是问send还是recv啊?
请问判断send是否成功是不是返回>0的状态?
liuscmail 2011-01-11
  • 打赏
  • 举报
回复
那我想问一下,recv有可能没有完全接受下来一个完整的包,是怎么回事?
当recv指定的接受缓冲区比socket的缓冲区还大的情况下,会存在接受不能完全接受缓冲区的状况吗?
有人说recv可能没有一次把数据接受完,send也可能没一次发生完所有数据,都是什么情况

高人详细解答一下。

[Quote=引用 2 楼 justkk 的回复:]

没研究那么深入
send的返回值就认为是成功发送到对方的字节数目

socket的发送变得可用,就是缓冲区有剩余空间,允许发送新的数据。
socket的接受变得可用,就是缓冲区有数据,允许读取
[/Quote]
justkk 2011-01-11
  • 打赏
  • 举报
回复
可能因为网络的原因
部分数据先期到达了,那recv就只返回这部分数据
Wenxy1 2011-01-07
  • 打赏
  • 举报
回复
查看send函数手册: #man send.
send()的返回值是成功把数据发送到目的机器的字节数(我不是很确定,也许是把数据放入到TCP/IP协议栈的发送队列)。建议看看书或者send的函数的实现。

有3年时间没怎么写应用程序了,:)。
justkk 2011-01-07
  • 打赏
  • 举报
回复
没研究那么深入
send的返回值就认为是成功发送到对方的字节数目

socket的发送变得可用,就是缓冲区有剩余空间,允许发送新的数据。
socket的接受变得可用,就是缓冲区有数据,允许读取
井朝天 2011-01-07
  • 打赏
  • 举报
回复
仅仅是写到发送缓冲区成功与否而已。(发送缓冲区满了就写不了啦)
照你这么说UDP里面该咋办?
李亚超 2011-01-07
  • 打赏
  • 举报
回复
0,成功。
liuscmail 2011-01-06
  • 打赏
  • 举报
回复
补充一下,socket的发送和接受变得可用,具体是指的什么状态

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧