在C中侦听连接的最佳方式 - 套接字

时间:2017-05-15 18:43:39

标签: c sockets

我的服务器运行良好。这个服务器是一个多客户端,它工作正常,但我认为我没有使用最好的方法,这个假设的主要观点是我'退出'应用程序的方式。我正在处理信号并退出,但它不对,我甚至无法使用valgrind进行调试。 在我的其他应用程序中,我使用全局变量来保存应用程序状态,例如pexit,并且在“永远”运行的每个线程中,条件为:

while (!pexit) ....

在信号句柄中,我只是将'pexit'设置为'true',一切正常。但我的问题是听力功能,即“阻塞”,因此我不能使用我的全局变量。没有阻止是更好的方法吗?

while ((client_sock = accept(socket_desc, (struct sockaddr *) &client, (socklen_t*) & c))) {
....

1 个答案:

答案 0 :(得分:1)

在主循环中,不要直接调用accept(),而是使用select()检查传入连接。将socket_desc(“母”套接字)添加到要监视读取的文件描述符列表中,并设置合适的超时。当select()返回socket_desc设置位时,您可以无阻塞地调用accept()。超时确保select()调用不会无限期阻塞。