Network programming C语言中TCP服务器的线程处理

Network programming C语言中TCP服务器的线程处理,network-programming,pthreads,Network Programming,Pthreads,这是我在这里的第一篇帖子,所以我想向大家问好。 我在编写TCP时遇到了一些问题,我希望有一个单独的线程,允许用户键入quit指令来终止进程。问题是它似乎没有运行。程序在接受时暂停,我无法向线程函数传递任何内容 线程函数: void *loop_stop() { while(progr_control != 'q') progr_control = getchar(); return NULL; } 主要(我推荐了一些我认

这是我在这里的第一篇帖子,所以我想向大家问好。 我在编写TCP时遇到了一些问题,我希望有一个单独的线程,允许用户键入quit指令来终止进程。问题是它似乎没有运行。程序在接受时暂停,我无法向线程函数传递任何内容

线程函数:

    void *loop_stop()
    {
        while(progr_control != 'q')
        progr_control = getchar();

        return NULL;
    }
主要(我推荐了一些我认为不会引起问题的代码):

pthread\u t thread\u id;
pthread_create(&thread_id,NULL,loop_stop,NULL);
做
{
听(sock_fd,5);
int addr\u len=sizeof(客户地址);
如果((new_sock_fd=accept(sock_fd,(struct sockaddr*)和client_addr,&addr_len))<0)
{
perror(“传入连接问题”);
返回-1;
}
其他的
//这是我说过的最重要的部分,这个循环在接受时停止
}while(progr_control!=“q”);
如果有人能找到bug,或建议其他处理任务的方法,我将不胜感激,正如Brian提到的:
“accept”将使线程等待输入连接,因此不可能进行“退出检查”。另一种方法是使用ctrl+c退出。

bind
的调用在哪里?您不应忽略相关的代码,例如,
sock\u fd
已初始化。
accept
将阻止,直到接收到传入连接,此时它将与该连接一起返回。简而言之,它永远不会进入“退出检查”,因为它被阻止了。它的“绑定”在我没有粘贴到这里的代码部分@BrianWhite谢谢,我想我会使用简单的ctrl+c来代替。@WiktorGonczaronek,请添加您自己的答案,这样这个问题就不会永远被“未回答”列表所困扰。
   pthread_t thread_id;
   pthread_create(&thread_id, NULL, loop_stop, NULL);

   do
   {

       listen(sock_fd, 5);
       int addr_len = sizeof(client_addr);

       if( (new_sock_fd = accept(sock_fd, (struct sockaddr *) &client_addr, &addr_len)) < 0)
       {
           perror("Problems with incoming connection");
           return -1;
       }
       else
        //here is the ommited part-as I've said this loop stops at accept

    }while(progr_control != 'q');