如何获取SOCKET缓冲区是否有未发送到网络上的数据?

lyingbo 2013-12-22 06:48:54
问题:在SOCKET编程中,可以使用setsockopt(s, SOL_SOCKET, SO_SNDBUF, buf_len, pam_len)函数设置SOCKET发送数据的缓冲区大小,使用中,我将缓冲区的设的较大,有6M多,在调用send接口发送数据之前,我想查询现在这个socket缓冲区中是否还有未发送到网络上的数据怎么才可以查询到缓冲区是否有剩余的数据还未发送到网络上?
...全文
731 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcf_reader 2013-12-29
  • 打赏
  • 举报
回复
好像没有查询的必要。 只有没收到的数据,没有没发送的数据
向立天 2013-12-27
  • 打赏
  • 举报
回复
引用 12 楼 Q342210738 的回复:
[quote=引用 9 楼 xianglitian 的回复:] 这个不用你关心 你想发就发 底层会处理发送队列的
知道底层会处理的,就是想从应用程序中知道内核层的数据有没有发送完[/quote]应该是没有 也没有什么意义吧
Yofoo 2013-12-26
  • 打赏
  • 举报
回复
就算内核发送出去了, 也无法保证网卡缓冲, 还有如果丢包协议里面可能需要再次发送 如果需要知道是否到达通讯的另一端, 最好socket的另一端做回应, 告知收到数据
lyingbo 2013-12-26
  • 打赏
  • 举报
回复
引用 9 楼 xianglitian 的回复:
这个不用你关心 你想发就发 底层会处理发送队列的
知道底层会处理的,就是想从应用程序中知道内核层的数据有没有发送完
lyingbo 2013-12-26
  • 打赏
  • 举报
回复
引用 4 楼 fishion 的回复:
[quote=引用 3 楼 Q342210738 的回复:] [quote=引用 2 楼 masterz 的回复:] 楼主想达到什么目的?
就是想在调用send接口发送数据之前,查询到socket缓冲区中是否还有未发送到网络上的数据[/quote] 应该是没有现成的方法了,所以才需要循环发送[/quote] 没有现成的接口,那有没有什么方法可以达到这个效果呢?
zhuyf87 2013-12-25
  • 打赏
  • 举报
回复
TCP发送的数据,要求对方确认,如果在发送主机设定的时间内,没有收到确认应答,将进行重传。只有收到确认后,TCP才会把已经确认的数据从队列缓冲区中删除。 我觉得应用层能做的好像就是循环发送,通过send返回值记录the total number of bytes sent。
向立天 2013-12-25
  • 打赏
  • 举报
回复
这个不用你关心 你想发就发 底层会处理发送队列的
96掌门师兄 2013-12-25
  • 打赏
  • 举报
回复
引用 3 楼 Q342210738 的回复:
[quote=引用 2 楼 masterz 的回复:] 楼主想达到什么目的?
就是想在调用send接口发送数据之前,查询到socket缓冲区中是否还有未发送到网络上的数据[/quote] 这个问题可能要到socket的底层协议栈了,不是很了解。但是如果你的发送缓冲区满的话(对方没有及时收),会降低发送的效率 send可能返回值为0,异步循环发送会导致循环的次数过多,你可以用select等一段时间,降低CPU空转。 不知道是不是为了解决这个问题
傻X 2013-12-24
  • 打赏
  • 举报
回复
send接口还是很成熟的。 如果是UDP的话,可以用自定义协议(对方发回接收到得数据数量,来判断是否丢包或者发送失败之类的) 如果是TCP的话,因为本身保证传输的,根本没必要如此。
5t4rk 2013-12-24
  • 打赏
  • 举报
回复
循环发送,获取sendedsize自己记录。
fishion 2013-12-23
  • 打赏
  • 举报
回复
引用 3 楼 Q342210738 的回复:
[quote=引用 2 楼 masterz 的回复:] 楼主想达到什么目的?
就是想在调用send接口发送数据之前,查询到socket缓冲区中是否还有未发送到网络上的数据[/quote] 应该是没有现成的方法了,所以才需要循环发送
lyingbo 2013-12-23
  • 打赏
  • 举报
回复
引用 2 楼 masterz 的回复:
楼主想达到什么目的?
就是想在调用send接口发送数据之前,查询到socket缓冲区中是否还有未发送到网络上的数据
masterz 2013-12-23
  • 打赏
  • 举报
回复
楼主想达到什么目的?
lyingbo 2013-12-23
  • 打赏
  • 举报
回复
请高手指点啊,多谢了~

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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