将已建立的TCP连接从一个进程移交给另一个进程 我正在编写一个简单的Web服务器,它用C++处理长时间的连接。但是,我需要不时地重新加载我的web服务器。我想知道是否有一种方法可以将已建立的连接从一个进程移交给另一个进程,以便在重新加载后保留已建立的连接
仅传递文件描述符就足够了吗?连接状态会发生什么变化? 有没有类似的开源项目做同样的事情 有什么想法或想法吗将已建立的TCP连接从一个进程移交给另一个进程 我正在编写一个简单的Web服务器,它用C++处理长时间的连接。但是,我需要不时地重新加载我的web服务器。我想知道是否有一种方法可以将已建立的连接从一个进程移交给另一个进程,以便在重新加载后保留已建立的连接,c++,linux,network-programming,C++,Linux,Network Programming,仅传递文件描述符就足够了吗?连接状态会发生什么变化? 有没有类似的开源项目做同样的事情 有什么想法或想法吗 谢谢,我真的不知道这是否可能,但我认为不可能。如果您fork(),则子进程将“继承”描述符,但我不知道它们的行为是否像should(尽管我怀疑它们是这样的。)并且使用forking时,您无法运行新代码(可以吗?)简单的描述符编号是特定于进程的,因此仅将它们传递给一个新的、不相关的进程也不起作用,当您的进程终止时,它们将被关闭 一种解决方案(如果没有更简单的解决方案)是将服务器分为两个进程:
谢谢,我真的不知道这是否可能,但我认为不可能。如果您
fork()
,则子进程将“继承”描述符,但我不知道它们的行为是否像should(尽管我怀疑它们是这样的。)并且使用forking时,您无法运行新代码(可以吗?)简单的描述符编号是特定于进程的,因此仅将它们传递给一个新的、不相关的进程也不起作用,当您的进程终止时,它们将被关闭
一种解决方案(如果没有更简单的解决方案)是将服务器分为两个进程:
正如我所说的,只有在没有更简单更简单的方法的情况下,您才可以尝试使用此解决方案。您所要做的就是传递文件描述符,但是,在父子进程关系之外执行此操作要困难得多。您是否计划让旧的web服务器启动新的web服务器?是的,可能。我现在不希望有父子进程。仅供参考:连接TCP套接字并分叉(并执行)一个新的子进程正是
inetd
守护进程所做的,因此,如果父进程持有套接字,子进程继承它,这是可能的。没错!谢谢你指出这一点。因此,连接的套接字描述符在fork
+exec
中确实存在。因此,OP需要做的就是执行下一个服务器进程(创建父/子关系),并以某种方式告诉它有趣的描述符是什么。@DaveS:你能写一个答案,再详细描述一下吗?我相信这比我的解决方法更合适。谢谢你的回复。不过我想指出,我的web服务器有代理连接(其中web服务器实际上是客户机)。这些连接也应该被移交。我搜索了多一点,看到了send\u fd和recv\u fd。还有一个用于此的包装器库。有什么想法吗?