在对等方关闭的 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 套接字上写入 的相关文章

  • C中函数指针的递归声明

    我想声明一个返回指向相同类型函数的指针的函数 我想用它来实现如下状态机 typedef event handler t event handler t event t compilation error event handler t st
  • “字符串”是什么意思?信息'

    我刚刚在查看定义时发现了这个PlatformNotSupportedException class 什么是string message意思是 据我所知是 是缩写Nullable lt gt but Nullable lt gt 只能应用于结
  • c# - 显示小数点到小数点后 6 位 [重复]

    这个问题在这里已经有答案了 可能的重复 具有 N 个小数位的 Double ToString https stackoverflow com questions 3059759 double tostring with n number o
  • is_integral 与 is_integer:其中之一是多余的吗?

    是积分 http en cppreference com w cpp types is integral and 是整数 http en cppreference com w cpp types numeric limits is inte
  • 动态选择和更新 LINQ 结果集中的列值

    我有一个场景 其中存在 LINQ 结果集 我使用了以下查询 var stockDetails from d in db BloodBanks where d bbUserName Session username ToString sele
  • 将 void *user_data 转换为对象

    我该如何投射void something到标准 C 中的对象 具体来说我想投void userdata to std map
  • 通过用于 Symbol 条码扫描仪 DS4208 的 SNAPI.dll API 捕获图像

    我想通过 SNAPI API 从 Symbol 目前为 Zebra 条形码扫描仪 DS4208 型号 我们还使用 Zebra 的另一个但兼容的型号 捕获图像 条形码捕获 识别效果很好 但看起来像SnapiDLL SNAPI SnapShot
  • boost::asio::io_service 是否保留处理程序的顺序?

    Does boost asio io service http www boost org doc libs release doc html boost asio reference io service html保证处理程序的调用顺序与
  • 修剪 UIImage 边框

    这是我想要修剪的图像的示例 我想去掉图像周围的边框 在本例中是顶部和底部的黑条 我在Github上找到了一个库 CKImageAdditions https github com cmkilger CKImageAdditions 但是它似
  • 试图使用加密来混淆我的项目打破了它

    我试图尝试不同的混淆选项 为了做到这一点 我首先尝试了加密货币 以下是我遵循的步骤 打开加密向导并选择一些选项 选择我的解决方案文件 完成向导后 我看到有些 Dll 被很好地混淆了 但我的项目现在无法构建 我注意到的两件事是 我的文件夹中有
  • 如何在Azure功能中添加razor视图文件?

    我正在创建一个应用程序 它是 azure 函数项目 我想在该项目中使用 Razor 视图 我应该在 azure 函数中使用任何模板引擎吗 得益于一些方面的进步剃刀之光项目 https github com toddams RazorLigh
  • Identity Server 4:添加访问令牌的声明

    我正在使用 Identity Server 4 和隐式流 并且想要向访问令牌添加一些声明 新的声明或属性是 tenantId 和 langId 我已将 langId 添加为我的范围之一 如下所示 然后通过身份服务器请求 但我也获得了tena
  • 我可以在 C++ 中重写非虚函数吗

    我想知道我可以重写 C 中的非虚函数吗 因为我在使用 C 时发现了这个问题override关键字我的代码如下 class A public void say cout lt lt From A n class B public A publ
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • C 中的链表数组:初始化和插入?

    我需要创建一个链表数组 如图所示 这就是我到目前为止所做的 typedef struct Node int data struct Node next Node int main void Node link 5 for int q 0 q
  • 如何在 Visual Studio 2010 Express 中引用 system.drawing?

    我对此有点陌生 我的印象是要绘制我创建的矩形 我需要使用 system drawing graphics 问题是 我收到错误 命名空间 System 中不存在类型或命名空间名称 drawing 您是否缺少程序集引用 当我右键单击解决方案资源
  • 使用 _Alignas 进行结构成员对齐

    我想知道以下问题 是新的吗 Alignas结盟 C11 中的说明符适用于结构成员吗 我一直假设这么多 但彻底阅读了 N1570 公开草案似乎表明对齐说明符不能 出现在一个说明符限定符列表 这就是我所期望的 如果得到支持的话 我已经读过几遍语
  • 如何创建和使用类箭头运算符? [复制]

    这个问题在这里已经有答案了 因此 在到处研究之后 我似乎找不到如何创建类箭头运算符 即 class Someclass operator gt 我只需要知道如何使用它并正确使用它 它的输入是什么 它返回什么 我如何正确地声明 原型化它 运算
  • 返回 ICollection 而不是 List 的真正优势是什么? [复制]

    这个问题在这里已经有答案了 我读过几篇博客文章 提到对于公共 API 我们应该始终返回 ICollection 或 IEnumerable 而不是 List 返回 ICollection 而不是 List 的真正优势是什么 Thanks 复
  • C#:如何处理乱序 TCP 数据包?

    请有人解释一下如何处理乱序数据包 我使用原始套接字来捕获数据包 并在数据包到来时解析它们 但其中一些数据包的顺序错误 例如 ID 标志 16390 PSH ACK 16535 PSH ACK 16638 确认 16640 PSH ACK 1

随机推荐

  • 如何下载整个 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 尝试 客户端 成功 它返回实际写入的字节数 而以下返回 如我