我正在制作一个小型 tcp 服务器,它通过线程处理许多请求。当我的服务器关闭时,他会留下未关闭的套接字。如何在新启动服务器时自动关闭它们或以某种方式释放它们?插座的数量很大,我不想手动管理它们。
有任何想法吗?
当我上次处理套接字时,我曾经做的是启动各个线程,每个线程都管理一个套接字,然后分别关闭它们,因此每个线程中的每个变量都包含套接字号。可以使用 close(s) 关闭套接字;其中 s 是套接字。即使当您关闭程序时,套接字也会由运行时释放,但最好关闭套接字以便其他程序可以使用它们。
套接字是在哪里创建的?在新线程内还是在线程启动之前?如果它在线程内,您可以考虑使用 pthread_cleanup_push() 安装一个处理程序,该处理程序在线程退出时关闭套接字(如果它仍然打开)。