如何解决叉上的TCP套接字关闭行为
首先,让我描述一下我要完成的工作。
我有一个要通过自动测试进行测试的服务器。为此,在编译期间使用forkserver例程对服务器进行检测,该例程可以被触发来中断正常的控制流并进入分支循环(类似于AFL ++的用法)。 这可以按预期工作。
服务器使用TCP进行通信。最初,测试程序将向服务器发送一些输入,然后进入派生模式,以便从此“快照”继续。 这是第一次对程序进行分叉。 分叉的进程被杀死或正常退出。然后,从原来的过程中分叉出一个新过程。
从阅读关闭手册页开始,我希望tcp套接字仍然能够接收数据,因为它仅在子进程中关闭,而在父进程中关闭。
但这不是事实,因为下一次发送到服务器的失败是errno=32
。
我现在有两个问题:
- 我是否误解了分叉处理tcp套接字的方式?
- 如果上述方法(派生并继续使用相同的tcp连接)不起作用,那么从具有与以前相同的tcp连接的特定执行点继续执行,可以达到预期效果的替代方法是什么? / li>
解决方法
-
EPIPE
(errno = 32)错误表明本地端已关闭。因此父套接字未关闭。但是,TCP连接可能会关闭。 - 我建议通过使用数组为每个进程使用一个套接字。但是这种解决方案看起来有点na。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。