Sockets 在分叉过程中如何处理套接字连接
例如,我有一个充当TCP服务器的程序,它侦听端口5000 现在我想运行另一个命令行进程,与此服务器并行运行。我知道正确的方法是分叉服务器,而不是调用“exec” 我的问题是,子进程是否也“拥有”这个端口5000?如果要释放此端口5000,是否需要同时终止父进程和子进程 我只是很好奇这个套接字连接在forking中是如何处理的Sockets 在分叉过程中如何处理套接字连接,sockets,process,tcp,fork,port,Sockets,Process,Tcp,Fork,Port,例如,我有一个充当TCP服务器的程序,它侦听端口5000 现在我想运行另一个命令行进程,与此服务器并行运行。我知道正确的方法是分叉服务器,而不是调用“exec” 我的问题是,子进程是否也“拥有”这个端口5000?如果要释放此端口5000,是否需要同时终止父进程和子进程 我只是很好奇这个套接字连接在forking中是如何处理的 首先,accept()传入连接。接受进程现在有了监听套接字和新接受的套接字的句柄 分叉和: 在儿童中: 关闭监听插座 使用已接受的套接字执行操作 在父项中: 关闭已接受
accept()
传入连接。接受进程现在有了监听套接字和新接受的套接字的句柄- 在儿童中:
- 关闭监听插座
- 使用已接受的套接字执行操作
无论何时创建子进程,它都会从父进程获取文件描述符表的副本。每个文件描述符对应一个引用计数,即当前访问文件/套接字的进程数。所以,如果一个套接字在主进程中打开,并且创建了一个子进程,那么引用计数会增加,因为它现在在子进程中也是打开的,当它在任何进程中关闭时,它会减少。当引用计数达到零时,套接字最终关闭 你是在有新连接传入时还是之前分叉的?@Simone,我在建立新连接后分叉。@ushfish所以Matt的答案是正确的。