关于Linux socket编程 send返回值的问题

loud1984 2009-07-05 07:28:33
使用阻塞模式,send的标志位置0,相当于write,一些书上说,send会一直阻塞知道把有用户缓冲区的所有内,容copy到内核。请问send的返回值代表啥意思?是copy到内核的字节数,还是非0就表示把所有的数据已经copy到内核(socket发送缓冲区)。
...全文
1687 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
send的返回值,就是实际copy到缓冲区的字节数。

http://topic.csdn.net/u/20080220/21/ccf9778c-1583-4cb9-803e-6875d6ff5958.html
晨星 2009-07-05
  • 打赏
  • 举报
回复
楼主说的也有道理。
send返回的值跟请求字节数不一样时,确实很有可能意味着错误。
但不管怎么,我想再尝试几次没有坏事,如果还不成功,再做为错误处理就是了。
当然,在要求不严格的应用中,直接做为错误处理也不是不可以。
大前置 2009-07-05
  • 打赏
  • 举报
回复
要分清楚,有困难
不想误人, 呵呵
给你个吵架的帖子,我收藏的
http://bbs.chinaunix.net/viewthread.php?tid=969374
晨星 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loud1984 的回复:]
一般情况下,阻塞模式下好像应该一直把所有数据copy到发送缓冲区才返回。如果提前返回(即你种情况表明发送缓冲区满了),是不是一般都表示出现了一些异常情况??
[/Quote]
我觉得不用管那么多。
总之对于一次没有全部发送完的情况,你肯定是要处理的。
另外,也可能是缓冲区太小,而你一次发送的数据太多。
loud1984 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
是copy到内核的字节数。
比如你让它发送100个字符,它可能返回50,表示只拷贝走了50个。而后面的50个字符,你需要等socket可写之后重新发送。
[/Quote]一般情况下,阻塞模式下好像应该一直把所有数据copy到发送缓冲区才返回。如果提前返回(即你种情况表明发送缓冲区满了),是不是一般都表示出现了一些异常情况??
晨星 2009-07-05
  • 打赏
  • 举报
回复
是copy到内核的字节数。
比如你让它发送100个字符,它可能返回50,表示只拷贝走了50个。而后面的50个字符,你需要等socket可写之后重新发送。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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