如何在另一个线程c ++上正确关闭服务器套接字

时间:2018-04-19 01:10:38

标签: c++ sockets

我在尝试使用c ++关闭服务器套接字时遇到问题。 当我启动我的应用程序时,我有我的主线程,我创建另一个配置,绑定和接受连接。

我的问题来自于我无法从另一个线程关闭套接字fd而不是创建fd的线程。

我尝试创建如下循环:

while (!_stopRequested) {
    client_session = accept(_session, reinterpret_cast<socket_t *>(&client_insocket), &clientsocksize);
    if (client_session == SOCKET_ERROR) {
        fprintf(stderr, "Socket accept error\n");
        continue;
    }
    printf("TODO clients holding, data serialization");
}
当我想退出循环然后关闭套接字但是它没有任何效果时,

_ stopRequested从主线程设置为true。 这是因为循环在accept上阻塞了。有没有办法让accept无阻塞一次?然后循环将按预期打破,我将能够从持有循环的线程中关闭套接字。

  

潜在解决方案

我正准备在服务器套接字线程上处理SIGINT。 通过调用pthread_kill(ssocket_thread, SIGINT),我应该从处理程序关闭服务器套接字,然后pthread_terminate()。但这种方式需要制作一个静态变量和静态函数,我想知道是否存在更简单的解决方案..

0 个答案:

没有答案