在对等方关闭的 TCP 套接字上写入

2023-11-21

我有一个客户端-服务器应用程序,其中每一端都通过 TCP 套接字与另一端进行通信。

我正确地建立了连接,然后在客户端将任何数据写入套接字之前使服务器崩溃。
我看到的是第一个write()尝试(客户端)成功,它返回实际写入的字节数,而以下返回(如我所料)-1(收到一个SIGPIPE) and errno=EPIPE.

为什么是第一个write()即使套接字已经关闭也会成功吗?

EDIT有时还包括以下内容write()拥有正的回报值,就好像一切都很顺利。


您对返回值感到困惑write()方法。这并不意味着“同行获得了数据并承认了它”。相反,它的意思是,“我缓冲了这么多字节发送给对等方,它们现在是我的责任,所以你可以忘记它们(并且我没有任何待处理的错误)”。

也就是说,如果 TCP 堆栈接受写入并返回n字节,这并不意味着它们已经被写入,只是排队等待写入。在开始发送网络流量之后,堆栈会放弃并向您返回错误,这需要一些时间,也许需要 30 秒。在此期间,您可以多次致电write()成功地将数据排队发送。 (如果对等点消失,则写入错误将在 c.30 秒内返回;如果可以联系对等点并立即发送 RST 数据包以指示连接已断开,则将立即返回写入错误。)

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

在对等方关闭的 TCP 套接字上写入 的相关文章

随机推荐

  • 如何下载整个 pypi Python 包索引

    我正在尝试找到一种方法来下载整个 PyPi 索引 并且仅下载索引 没有代码文件 我想分析许可证类型 以便能够排除许可证类型限制过多的库 我已经在网上查看并浏览了用户指南 但如果答案就在那里 我却无法理解 嗯 你可以使用PyPi 的简单索引无
  • CSS 属性选择器 + 后代在 Webkit 中出现错误?

    考虑这个 CSS data color red h1 background color red data color blue h1 background color blue 还有这个 HTML div h1 red h1 div div
  • 使用 Firebase-UI (Android) 的 Firestore 聊天应用

    我正在尝试使用 Cloud Firestore 的 Firebase UI 库创建聊天 Thisgithub存储库包含我正在使用的相关代码 问题在于查询的顺序 看到查询被指定为 Query sChatQuery sChatCollectio
  • Castle Windsor IoC 属性注入简单操作方法

    好吧 我想也许有too much有关温莎城堡的信息 因为寻找这些关键字可以为我提供所有内容的示例 坦率地说 我不太了解它如何工作以正确解决此问题 我已经尝试了很多排列 但运气不佳 我有一个IUnitOfWorkFactory我想实例化为单例
  • 如何在 Xcode 5 上找到 arm-apple-darwin#-llvm-gcc-4.2 编译器?

    我正在绑定一个交叉编译 为此我需要找到 Xcode 放置 arm gcc 编译器的位置 它曾经位于 Applications Xcode app Contents Developer Platforms iPhoneOS platform
  • 在 k8s 中使用本地 docker 镜像,无需设置注册表

    我已经根据以下内容设置了单节点 kubernetes官方教程 除了官方文档之外 我还设置了单节点集群 kubectl taint nodes all node role kubernetes io master 残疾人驱逐限制 cat lt
  • Treeview ContainerFromItem 始终返回 null

    我已经阅读了有关此主题的一些主题 但找不到任何可以做我想做的事情 我有一个绑定到一组分层对象的树视图 这些对象中的每一个都代表地图上的一个图标 当用户单击地图上的某个图标时 我想在树视图中选择该项目 将焦点放在它上 然后将其滚动到视图中 地
  • 如何制作可扩展 Flutter 小部件的动画以将其滑出屏幕

    我有两个连续的可扩展按钮占据了整个屏幕宽度 单击左侧按钮时 我希望左侧按钮占据整个屏幕宽度 右侧按钮通过向右滑动到屏幕外而消失 这是我到目前为止所取得的成就 正如您所注意到的 当没有足够的空间来渲染右侧按钮时 它会在最后被压扁 我只是希望它
  • Django Rest Framework 数据库错误异常处理

    有没有办法让 Django Rest Framework 自动响应HTTP 400 STATUS什么时候出现数据库异常 IntegrityError等等 示例 我有一个具有唯一用户名字段的模型 并且我正在尝试使用通用的rest framew
  • 将文件转换为 Base64String 并再次转换回来

    标题说明了一切 我像这样读了 tar gz 存档 将文件分解为字节数组 将这些字节转换为 Base64 字符串 将 Base64 字符串转换回字节数组 将这些字节写回到新的 tar gz 文件中 我可以确认两个文件的大小相同 以下方法返回
  • 强制元素水平对齐

    假设我的 div 中有随机的子元素 其固定高度和宽度设置为 100 以便与布局同步 我必须使用哪种 CSS 来强制子元素水平对齐 并且当 div 的宽度小于内容时 显示滚动条并且不相互重叠 Fiddle http jsfiddle net
  • 如何更改 PostgreSQL 数据库表中列的位置?

    我尝试了以下方法 但没有成功 ALTER TABLE person ALTER COLUMN dob POSITION 37 改变列位置 在 PostgreSQL Wiki 中说道 PostgreSQL 目前定义了列 订单基于attnum的
  • 如何使用 Karma Runner(又名 Testaulous)提供 svg 和固定装置

    在过去的两个小时里 我一直在尝试让 Karma runner 提供 svg 文件和 html 固定装置 但到目前为止还没有成功 根据该线程的第二个答案 将 html 与 testaulousjs 集成时出错我一直在尝试使用served表明我
  • 使用 shell 脚本合并两个属性文件

    如何合并两个属性文件 例如使用 shell 脚本 如果我有两个属性文件 例如 first properties test file anish test version 3 0 second properties test author n
  • 通过单击并拖动来“检查”多个复选框?

    我有一个充满复选框的表格 如下所示 我希望能够按住鼠标并拖动以激活多个复选框 我不知道从哪里开始 我寻找答案 但只找到了另一个线程有人询问如何做 但没有答案 HTML table tbody tr td td tr tbody table
  • 在 JavaFX 2.2 桌面应用程序中嵌入 Google 地图会引发异常并且通常无法执行

    我有一个项目需要在桌面java应用程序中嵌入谷歌地图 经过一番研究后 我发现 Java FX 确实提供了此功能 并继续编写了一个示例应用程序作为 PoC 应用程序运行正常 一切都很好 升级到新的 7u7 java 版本后 我的代码不再像以前
  • 应用程序第一次升级 sqlite 数据库时崩溃

    当第一次更新 sqlite 数据库时 我的应用程序遇到崩溃 重新加载应用程序 从此一切正常 我猜这与 onUpgrade 函数有关 我似乎无法找到问题出在哪里 非常感谢任何建议 提前致谢 数据库助手 public class Databas
  • 如何在 C# 中处理 JSON?

    是否有一个简单 优雅的解析器来处理 C 中的 JSON 实际序列化 反序列化为 C 对象怎么样 JSON Net是一个相当不错的图书馆
  • 如何根据 pandas python 中的特定列合并两个数据框?

    我必须合并两个数据框 df1 company standard tata A1 cts A2 dell A3 df2 company return tata 71 dell 78 cts 27 hcl 23 我必须将两个数据帧统一为一个数据
  • 在对等方关闭的 TCP 套接字上写入

    我有一个客户端 服务器应用程序 其中每一端都通过 TCP 套接字与另一端进行通信 我正确地建立了连接 然后在客户端将任何数据写入套接字之前使服务器崩溃 我看到的是第一个write 尝试 客户端 成功 它返回实际写入的字节数 而以下返回 如我