如何确定Windows Sockets发送缓冲区是否为空?

2023-12-19

我需要知道 Windows 套接字的发送缓冲区何时为空,即它何时被放入线路。 SIO_FLUSH 似乎什么也不做,只是杀死该缓冲区的内容,而不是等到 TCP 完成发送它。

我需要它的原因是因为我不能开始在单独的连接上发送数据,直到手头连接上的数据全部发送(或最接近)。

这似乎是一个非常奇怪的要求,看起来像是糟糕的协议,但该协议是 HTTP,并且已经通过了它的测试:)。我需要将大量数据实时推送到浏览器,而网络延迟时间会阻止我在数据进入时请求更多数据,因为这会导致基于延迟的请求变慢,而不仅仅是带宽。理想的解决方案是接收 1 个实时数据流的无休止的请求,但如上所述,我必须使用不支持此功能的 HTTP。我无法控制客户端的 HTTP 实现(严格来说是请求-响应)。

因此,为了优化带宽使用并尽可能接近实时数据,我需要在发送连接 2 的数据之前知道连接 1 上的缓冲区何时发送(数据是实时生成的,不应过时) 。

如果有人知道如何实现此目的,请告诉我。


在Windows中,没有办法查询发送缓冲区的状态。

如果发送方使用阻塞套接字,只要发送缓冲区有空间,套接字就会继续接受更多数据,然后当缓冲区填满时,套接字将阻塞发送代码,直到缓冲区释放一些空间。

如果发送方使用非阻塞套接字,则套接字将报告WSAEWOULDBLOCK当缓冲区填满时出错,然后稍后出错FD_WRITE通知将告诉发送者发送缓冲区何时释放了一些空间。

无论哪种方式,套接字都会通知您发生了什么,您不必查询它。

根据响应数据的性质,HTTP 1.1Transfer-Encoding: chunked功能,或各种服务器推送 http://en.wikipedia.org/wiki/Server_push技术,可以在 HTTP 中用于您描述的情况类型。您的 HTTP 客户端是否支持其中任何一个是另一回事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定Windows Sockets发送缓冲区是否为空? 的相关文章

  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • Windows 窗口对接

    我想知道如何在 Windows 中将窗口停靠 捕捉到屏幕的一侧 最好使用直接的 Win32 API 我正在寻找的效果就像任务栏 一个在屏幕上有保留空间的窗口 因此最大化另一个窗口会使该窗口占据屏幕的其余部分 但使我的窗口保持在适当的位置并可
  • 对卡在 CLOSE_WAIT 状态的连接进行故障排除

    我有一个在 Windows 上的 WebLogic 11g 中运行的 Java 应用程序 几天后它变得没有响应 我注意到的一个可疑症状是大量连接 大约 3000 个 出现在netstat即使服务器空闲 也具有 CLOSE WAIT 状态 由
  • 不在焦点时响应键盘? (C#、Vista)

    我正在尝试编写一个应用程序 只要按下 Shift 键 无论当前哪个应用程序具有焦点 它都会做出响应 我尝试过这个SetWindowsHookEx 与GetKeyboardState 但这两种方法仅在应用程序窗口具有焦点时才有效 我需要它在全
  • 将 CrashDumps 转储到应用程序运行所在的同一文件夹中

    我编写了一个应用程序 我希望对其进行一定程度的自动调试 我想使用 Windows 错误报告将故障转储输出到应用程序运行所在的同一文件夹中 我的想法是 我可以让我的应用程序在它自己的文件夹中查找任何 dmp 文件 然后根据需要上传它们进行分析
  • 如何用单线程实现TCP上的全双工通道?

    我正在编写的网络库需要通过 TCP 套接字发送和接收消息 消息可以随时发送或接收 即应该作为全双工通道工作 我能够使用两个线程来实现这样的场景 调用 send 的主线程和一个主要在 receive 调用处阻塞的专用线程 我的问题是 是否可以
  • 非托管 C++ 中的默认打印机

    我正在寻找一种使用非托管 C 查找 Windows 默认打印机名称的方法 找到了大量 NET 示例 但非托管没有成功 谢谢 以下是如何获取当前打印机和默认打印机的列表 如果有一台设置为默认打印机 另请注意 如果用户没有打印机或未将打印机名称
  • 卸载以前的版本安装新版本的安装项目

    我创建了一个安装项目并安装在Windows系统中 在安装安装项目之前 我将其设置为 DetectNewInstallerVersion true and RemovePreviousVersion True 我也每次都换版本 但是 如果我重
  • 如何向未知用户目录读取/写入文件?

    我正在尝试从用户目录 C Users USERNAME Test Source 读取和写入文件 但我未能成功找到任何有关如何自动检测用户名的资源 其中的 USERNAME上面的例子 或者无论如何 我可以让它读取和写入目录 而不需要知道用户名
  • 关闭有效句柄时,AppVerifier 报告“无效句柄 - 代码 c0000008”

    我有一个简单的测试程序 在运行时会失败并出现异常AppVerifier 程序重复STD INPUT HANDLE然后尝试使用关闭它CloseHandle 该程序运行良好 无需AppVerifier返回TRUE for CloseHandle
  • 在 Win7 登录屏幕上运行应用程序[重复]

    这个问题在这里已经有答案了 我想通过服务在 Windows 7 的登录屏幕上运行应用程序 我对此进行了长期研究并尝试了不同的方法 但不幸的是到目前为止还没有完全成功 我设法在当前登录用户的锁定屏幕上运行该应用程序 起初我认为这就是我基本上试
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 如何迭代所有注册表项?

    我正在尝试迭代所有注册表项以查找 包含 并删除 jre1 5 0 14 值 有办法做到吗 下面的代码只是在特定键下找到jre1 5 0 14 我确实想迭代所有的键 顺便说一句 if 子句获取是否等于 jre1 5 0 14 但如果它包含 j
  • 使用管理员权限打开cmd(Windows 10)

    我有自己的 python 脚本来管理我的计算机上的 IP 地址 它主要在命令行 Windows 10 中执行netsh命令 您必须具有管理员权限 这是我自己的计算机 我是管理员 运行脚本时我已经使用管理员类型的用户 Adrian 登录 我无
  • 将 OpenBLAS 链接到 MinGW

    我正在尝试链接OpenBLAS https www openblas net 图书馆与明GW w64 https mingw w64 org Windows 上的编译器 这是我的代码 include
  • 为什么假设 send 可能返回的数据少于在阻塞套接字上传输的请求数据?

    在流套接字上发送数据的标准方法始终是调用 send 并写入一大块数据 检查返回值以查看是否发送了所有数据 然后再次调用 send 直到整个消息被接受 例如 这是一个常见方案的简单示例 int send all int sock unsign
  • 为什么 Windows 命令 DIR 在搜索 *.tif 文件时也会输出 *.tiff 文件?

    我想使用 Windows 命令DIR为了找到唯一TIF文件 即具有扩展名的文件 tif 因此我使用以下小批处理文件 for f delims a IN dir b a d s C wolter testversion input tif d
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • Windows:更改与文件类型关联的应用程序的名称/图标

    我想将 Windows 中的文件类型与特定应用程序相关联 但我需要这样做 以便当用户打开 打开方式 菜单时 列表中应用程序的名称和图标是针对该文件类型自定义的 即 不仅仅是可执行文件的名称和图标 这是因为该二进制文件是一个通用二进制文件 可

随机推荐

  • JSF2 静态资源管理——组合、压缩

    有谁知道动态组合 缩小所有 h outputStylesheet 资源 然后在渲染阶段组合 缩小所有 h outputScript 资源的方法 混合 缩小的资源可能需要使用基于组合资源字符串或其他内容的键进行缓存 以避免过度处理 如果这个功
  • 位置:粘性 - 与 javascript 高度调整结合使用时滚动弹跳

    玩完之后position sticky有一段时间 我开始实现粘性导航 并遇到了这个有趣但令人沮丧的滚动弹跳问题 这是许多网站上常见的导航行为类型 传统上您会使用 JavaScript 来计算页面中相对元素的偏移量 当元素到达窗口顶部时 将添
  • 在conda环境中安装tensorrt

    我正在尝试在 conda env 中安装tensorrt 并且通过 conda navigator 在我的环境中安装了 cudatoolkit 和 cudnn 我还更新了我的 pip 和 setuptool 但出现以下错误 我应该怎么办 E
  • 如何替换上传文件的文件名中的空格

    我正在制作一个 SWF 上传器并已完成 HTML 表单 它工作得很好 直到我上传名称中包含空格的 SWF 文件 如何用下划线替换空格 我努力了 str replace file 和 preg replace file 如何用下划线替换空格
  • 轨道发动机及装置

    我有一个 Rails 引擎 我想在其中使用 Devise 我像正常一样安装了以下设备本指南 https github com plataformatec devise wiki How To 3a Use devise inside a m
  • “找不到适用于应用程序的有效 aps 环境权利”

    当我将支持推送通知的 iPhone 应用程序的 Ad Hoc 版本加载到我的设备上时 我遇到此错误 找不到适用于应用程序的有效 aps 环境权利 这是什么意思 我该如何修复它 我找到了解决方案 在 构建 gt 代码签名身份 下的项目信息中
  • SQL Server 2005 - 使用前导零格式化十进制数(包括带符号的小数!)

    我需要格式化数字 例如 1 99 21 34 1797 94 300 36 21 99 2 31 使用 SQL Server 2005 T SQL 将格式掩码转换为 0000 00 保留有符号整数和点后的小数 这将用于金融系统的文本文件导出
  • 如何下载 Microsoft.TeamFoundation.Framework.Common.dll

    我正在 Visual Studio 2015 中构建一个应用程序 以允许人们查看 TFS 服务器的变更集 我找到了一些示例代码 但是它需要引用 Microsoft TeamFoundation Framework Common dll 但我
  • 如何将数组/数据表等变量传递给 SQL Server?

    有时 您需要升级数据库 其中数据表中有许多行 或者您有一个充满数据的数组 而不是将所有这些数据放在一个字符串中 然后在 SQL SERVER 中拆分 或者不是在 SQL SERVER 中迭代数据表 逐行代码并更新数据库 还有其他方法吗 SQ
  • 防止按钮在回车键上提交

    我有两个按钮 一个带有 id enterToSubmit 另一个带有 id clickToSubmit 当用户按下回车键时 我希望 enterToSubmit 按钮提交表单 而不是 单击提交 按钮 在同一页面上 我有一个文本框 id tit
  • MySql REGEXP 匹配两个逗号分隔的字符串

    我有一个包含以下值的表 id value 1 1 2 5 8 12 20 2 11 25 26 28 现在我想搜索一些逗号分隔的 ID 例如上述值列中的 1 3 6 7 11 例如 SELECT id FROM tbl name WHERE
  • DecimalFormat 被服务器设置覆盖

    目前我在显示格式化小数时遇到问题 在我的本地计算机中 我有一个十进制值 0 002100000000 存储在数据库中
  • 为什么 libcurl 不为 IP 设置 SNI?

    我刚刚注意到当我使用 IP 进行 HTTPS 调用时 libcurl 没有设置 SNI 字段 我找到了这个 https github com curl curl blame master lib vtls openssl c ifdef S
  • 正则表达式 \p{Punct} 错过了 java 中的 unicode 标点符号

    我写了一个小测试来演示 Test public void missingPunctuationRegex Pattern punct Pattern compile p Punct Matcher m punct matcher asser
  • 如何在断开连接的系统上“repo init”?

    我已经镜像了一个存储库 repo init u
  • FreeBSD 上的“tty”是什么?

    uprintf 函数输出到当前进程的控制tty 这是 Freebsd MAN 中对 uprintf 的描述 我不明白tty是什么 谢谢 假期愉快 A tty是字符 I O 设备的抽象模型 它最直接的是一个系统接口 有相应的应用程序接口 从前
  • 为什么临时对象可以绑定到const引用?

    问题来源 https stackoverflow com a 36955656 4784683 唯一失败的情况是通过非常量引用传递参数 因为临时变量无法绑定到它 void DrawLine const Vector v1 const Vec
  • Mirth:使用客户端证书调用 SSL SOAP Web 服务

    该场景围绕从 Mirth 中调用外部 SSL SOAP Web 服务进行 Web 服务需要 SSL TLS 连接以及客户端证书 目的是使用内置的 SOAP 发送方目标来调用远程安全 Web 服务 并以某种方式包含该客户端证书 据我所知 您首
  • VS2015 - IntelliSense 无法在类库中的剃刀视图中工作

    我很难描述确切的问题 但这似乎 只是 一个仅在 razor cshtml 视图中显示的 IntelliSense 问题 我已经看了两天了 所以我真的需要一些帮助 我正在使用 VS2015 Pro 使用标准模板启动了一个新的 Web MVC
  • 如何确定Windows Sockets发送缓冲区是否为空?

    我需要知道 Windows 套接字的发送缓冲区何时为空 即它何时被放入线路 SIO FLUSH 似乎什么也不做 只是杀死该缓冲区的内容 而不是等到 TCP 完成发送它 我需要它的原因是因为我不能开始在单独的连接上发送数据 直到手头连接上的数