我以某种方式与套接字断开连接,或者至少从 recv()
返回的值为零。从似乎触发问题的原因来看,我认为这是越界内存写入。但是,我正在输出我的套接字的值并且它没有被破坏。
有没有一种方法可以在不调用 recv() 的情况下检测到“断开连接”(因为我已经调用它来读取字节,我正在寻找可以在整个代码中查询的内容以准确检测“断开连接”的时间发生)?
recv()
是否可能由于非法内存写入而返回零,但套接字描述符值保持不变?
最佳答案
recv
的返回值 0 表示 EOF,即对等方已关闭其连接端(或至少通过 shutdown
关闭它以进行写入)。我看不出有任何理由相信它应该与您这边的内存破坏有关; recv
通常是一个非常薄的系统调用包装器,即使您的程序调用了未定义的行为,您在用户空间中所做的任何事情都不太可能影响它的行为。
关于c - 非法内存写入导致 recv() 返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357522/