在winsock中,我如何阻止接受函数阻止来自另一个线程?

时间:2012-04-14 06:40:51

标签: winapi winsock

所以这是我的情况。我正在与winsock合作,学习有关网络和协议开发的一些事情,并且我已陷入僵局。我现在正在做一个在接受调用时阻塞的服务器,但在后台有另一个线程在等待用户输入和处理用户输入。这个用户输入用于send,ping和say等命令,但现在我想要一个名为exit的命令,它将关闭winsock,释放所有打开的连接,然后结束程序。问题是,这个接受线程仍在阻塞。

所以这是问题所在。 1)无论如何,在调用时阻止winsock函数阻塞,2)在非阻塞模式下是这样的:

while(m_continue)
{
      Sleep(1);
      tempsock = accept(m_listenSock, NULL, NULL);
      if(tempsock != INVALID_SOCKET)
      {
            if(WSAGetLastError() == WSAEWOULDBLOCK)
                  continue;
            else 
                  return 1;
      }
      break;
{

是多余的还是太难以使用?

1 个答案:

答案 0 :(得分:3)

在用户命令线程中,当您处理“exit”命令时,请关闭m_listenSock套接字。阻止accept()来电将立即退出INVALID_SOCKET

请务必不要关闭m_listenSock手柄两次。