【发布时间】:2010-09-30 19:30:59
【问题描述】:
由于我目前只在 C 语言中执行 this project,因此到目前为止我只将我的网络服务器用作单线程应用程序。不过,我不想再这样了!所以我有以下代码来处理我的工作。
void BeginListen()
{
CreateSocket();
BindSocket();
ListenOnSocket();
while ( 1 )
{
ProcessConnections();
}
}
现在我在ProcessConnection(); 开始之前添加了fork();,这有助于我允许多个连接!但是,当我添加代码以守护在this answer 中找到的应用程序时。我遇到了一个小问题,使用fork() 将创建我整个正在运行的应用程序的副本,这就是fork() 的目的。所以,我想解决这个问题。
我的ProcessConnection() 看起来像这样
void ProcessConnections()
{
fork();
addr_size = sizeof(connector);
connecting_socket = accept(current_socket, (struct sockaddr *)&connector, &addr_size);
if ( connecting_socket < 0 )
{
perror("Accepting sockets");
exit(-1);
}
HandleCurrentConnection(connecting_socket);
DisposeCurrentConnection();
}
我将如何简单地在connecting=socket = accept... 上方或之后添加几行以使其同时接受多个连接?我可以使用fork(); 但是当它归结为DisposeCurrentConnection(); 时,我想终止该进程并让父线程运行。
【问题讨论】:
-
这个问题与线程无关——因为您使用的是 fork,它是一个多进程网络服务器,而不是多线程。
-
@frankodwyer,我也很高兴看到有关 pthreads 的教程或示例,fork 只是一个示例。
标签: c multithreading posix unix