我有一个客户端应用程序,通过QMP Unix域套接字与QEMU进程进行通信。有时,在客户端调用close()关闭套接字连接后,“netstat -ap unix”仍然显示套接字处于连接状态。我确实检查了close()调用的返回值,并且它成功地返回了0,但连接似乎仍在等待。
由于QMP实际上不支持其套接字上的多个连接,因此所有后续连接套接字的调用都会失败,因为它们无限期地等待挂起的连接被关闭。
是否有一种方法可以从代码中确保套接字已真正关闭,是否有一种强制关闭套接字的方法?
由于QMP实际上不支持其套接字上的多个连接,因此所有后续连接套接字的调用都会失败,因为它们无限期地等待挂起的连接被关闭。
是否有一种方法可以从代码中确保套接字已真正关闭,是否有一种强制关闭套接字的方法?
close()
之前调用shutdown()
不会改变任何东西。显然你漏掉了某个close()
。 - user207421fork()/exec()
或类似方式将fd泄漏到另一个进程中。使用fcntl(fd, F_SETFD, FD_CLOEXEC)
确保这不是问题的根源。 - Anya Shenanigans