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