我正在用 C 编写一个服务器程序,其中每次客户端连接时,我都会创建一个新的 pthread 来处理客户端的请求。
但是,当所有线程都退出时,我的程序就会退出,就好像调用了 exit() 一样。这是一个问题——我该如何克服它?
假设服务器正在运行,并且有 2 个客户端连接。一旦这些客户端断开连接——因此两个线程都退出了——那么我的服务器进程就会退出。我想要的是让我的服务器保持接受()套接字请求。通常这在我使用 fork() 和 accept() 时有效。我做错了什么导致父进程终止而不是无限循环?
代码看起来基本上是这样的:
void *talker( void *d ) {
int fd;
char buf[] = "Hello client";
fd = (int)d;
while( 1 ) {
write( fd, buf, strlen( buf )+1 );
sleep(4);
}
}
int main( int argc, char *argv[] ) {
pthread_t thread[50];
int sockfd;
struct sockaddr_in client_addr;
int i = 0;
int s1;
/* ... other declarations */
if (initialize_server_socket(portno, &sockfd) < 0) {
fprintf(stderr, "Could not initialize socket\n");
exit(-1);
}
while( 1 ) {
s1 = accept( sockfd, (struct sockaddr *)&client_addr, &n );
pthread_create( &(thread[i++]), NULL, talker, (void *)s1 );
}
return(0);
}
另外:这是我已经问过的问题的同一个项目(链接如下)......虽然在花费太多时间尝试使用 select() 和 IPC 失败后,我想我会给线程一个旋转,因为它的简单性共享地址空间。
此外,大部分代码取自这里:http ://www.s5h.net/2006/06/27/pthread-socket-server-in-c/