【问题标题】:Know when data is sent知道何时发送数据
【发布时间】:2011-08-11 06:47:17
【问题描述】:

我相信知道在非阻塞模式下调用 send 或 WSASend 只是在内部缓冲区中添加数据,但是如何知道数据何时真正发送?我的目标是显示进度条。

【问题讨论】:

  • 在我的回答(已删除)中,我没有正确解释您想要的内容。这可能也不是,所以这只是一个评论。使用非阻塞套接字,如果发送缓冲区已满,我相信您将从发送调用中获得 WSAEWOUDBLOCK。如果发送返回值小于给定的总数,则需要用剩余的数据再次调用发送。因此,例如,如果您的发送缓冲区设置为 128K,那么您可以测量您正在进行的进度并从中生成进度条信息。
  • 我试过了,但是更改发送缓冲区大小不能正常工作,我点击了这个链接:stackoverflow.com/questions/3145871/… 并且它有效!谢谢!
  • “发送”到底是什么意思?如果你有一块有点智能的卡在做自己的缓冲,你会计算操作系统将数据交给网卡的那一刻,还是数据到达网络的那一刻?使用 VMware 之类的东西变得更加棘手
  • 我希望“发送”靠近其他应用程序的“接收”。但是这个问题在这个主题的帮助下得到了解决:stackoverflow.com/questions/3145871/…

标签: c++ networking winsock


【解决方案1】:

您可以尝试Boost.Asio(如果您可以更改)。它可以执行异步或同步发送和接收。异步发送时,您可以注册一个发送完成时将调用的函数。

【讨论】:

  • 谢谢,但我必须直接使用winsock。
猜你喜欢
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2022-01-20
  • 2015-05-19
相关资源
最近更新 更多