c - 非法内存写入导致 recv() 返回零

标签 c linux sockets tcp

我以某种方式与套接字断开连接,或者至少从 recv() 返回的值为零。从似乎触发问题的原因来看,我认为这是越界内存写入。但是,我正在输出我的套接字的值并且它没有被破坏。

有没有一种方法可以在不调用 recv() 的情况下检测到“断开连接”(因为我已经调用它来读取字节,我正在寻找可以在整个代码中查询的内容以准确检测“断开连接”的时间发生)?

recv() 是否可能由于非法内存写入而返回零,但套接字描述符值保持不变?

最佳答案

recv 的返回值 0 表示 EOF,即对等方已关闭其连接端(或至少通过 shutdown 关闭它以进行写入)。我看不出有任何理由相信它应该与您这边的内存破坏有关; recv 通常是一个非常薄的系统调用包装器,即使您的程序调用了未定义的行为,您在用户空间中所做的任何事情都不太可能影响它的行为。

关于c - 非法内存写入导致 recv() 返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357522/

相关文章:

node.js - Nodejs Socket 聊天应用程序 : Need to display the online and offline status

c - 确定哪些共享库调用我的共享

c - 如何在 C 中启动 VNC 服务器?

无法从单链表中删除元音

linux - ksh 将命令结果存储到变量

c++ - 需要解释如何使用 C++ 在 Linux 上创建 utf-8 编码的文件

java - 在 Java 中检测无法访问的主机的最快方法是什么?

c - 在实际预制卸载之前有没有办法到 "try umount"?

python -c 和 `while`

c - IPv6 绑定(bind)失败 Linux