linuxc socket 如何使 accept() 立刻终止

问题:在linux c下 socket 阻塞模式accept函数如何有效退出?

在其它线程,使用close()有时也无法使accept抛出异常,立刻退出。

奇怪的是,在m_socket=-1处加个断点,再运行,accept就立刻退出了。

void CMySocket::Free()
{
    if(m_socketfd < 0)
        return;
    close(m_socketfd);
    m_socketfd = -1;
    if(m_acceptfd < 0)
        return;
    close(m_acceptfd);
    m_acceptfd = -1;
}

其他线程 自定义一个本地的tcpclient 连一下再断开,主线程中在accept再次监听之前退出,这样简单些

我理解的场景是多线程,然后有一个线程accpet阻塞住怎么有效退出:

  1. 使用select/poll,异步地accept连接;
  2. 期望该线程退出时,在另一线程中使用pthread_cancel和pthread_join。因为select/poll是一个线程取消点,因此再次执行到它们时,线程就会退出。