我的服务器运行良好。这个服务器是一个多客户端,它工作正常,但我认为我没有使用最好的方法,这个假设的主要观点是我'退出'应用程序的方式。我正在处理信号并退出,但它不对,我甚至无法使用valgrind进行调试。
在我的其他应用程序中,我使用全局变量来保存应用程序状态,例如pexit
,并且在“永远”运行的每个线程中,条件为:
while (!pexit) ....
在信号句柄中,我只是将'pexit'设置为'true',一切正常。但我的问题是听力功能,即“阻塞”,因此我不能使用我的全局变量。没有阻止是更好的方法吗?
while ((client_sock = accept(socket_desc, (struct sockaddr *) &client, (socklen_t*) & c))) {
....
答案 0 :(得分:1)
在主循环中,不要直接调用accept()
,而是使用select()
检查传入连接。将socket_desc
(“母”套接字)添加到要监视读取的文件描述符列表中,并设置合适的超时。当select()
返回socket_desc
设置位时,您可以无阻塞地调用accept()
。超时确保select()
调用不会无限期阻塞。