我需要您的帮助来解决此问题。
我必须基于AF_UNIX在UNIX上创建一个多线程的客户端-服务器程序
套接字,必须处理多达数千个同时连接,并且还必须根据接收到的信号类型执行不同的操作,例如服务器收到SIGINT
时关闭。
我考虑过这样做,首先禁用SIGINT
和主线程的信号sigmask中的其他信号,然后启动一个调度线程,使(我知道这样做的效率很低)一直等待{{1} }用于I / 0请求,接受新的连接,然后精确地读取select()
个字节,其中sizeof(request)
是一个众所周知的结构,然后还创建一个线程来处理接收到的信号,唯一一个使用request
重新启用信号,并最终启动另一个服务器线程以执行实际工作。
我有这个问题:
sigwait()
返回。我对此有一个自我欺骗技巧,但我认为我做错了,因为即使我让信号处理线程写入select的读取集中的管道中,{ {1}}将不会返回。我如何让select()
返回?select()
的内容,它可以有效地处理许多同时发生的连接。我应该使用它吗?我只读select()
就不知道了,在我的教科书中甚至没有提到。epoll()
返回之前释放内存? 无论如何,非常感谢您的帮助,这个平台真的很棒,当我得到更多专家时,我会回馈社区给我帮助!
(对不起,我的英语,但这不是我的母语)