私は現在このプロジェクトをCでのみ行っているので、これまではWebサーバーをシングルスレッドアプリケーションとしてのみ使用してきました。しかし、私はもうそれを望んでいません!だから私は私の仕事を処理する次のコードを持っています。
void BeginListen()
{
CreateSocket();
BindSocket();
ListenOnSocket();
while ( 1 )
{
ProcessConnections();
}
}
fork();
これで、開始前に追加しました。これはProcessConnection();
、複数の接続を許可するのに役立ちます。ただし、この回答にあるアプリケーションをデーモン化するためのコードを追加すると、少し問題が発生しました。を使用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();
結局のところ、そのプロセスを強制終了して、親スレッドを実行したいだけです。