TCP サーバーサンプル Linux 実装。
Linux 固有のサーバー処理を実装します。
main() / handle_client_session() / parse_args() は tcpServer.c に実装します。 g_session_fn の実体は tcpServer_common.c に定義されます。
c-modernization-kit sample team
1.0.0
2026/03/17
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
static void sigchld_handler ( int sig )SIGCHLD シグナルハンドラ。
waitpid() でゾンビプロセスを回収します。
static void shutdown_handler ( int sig )SIGINT / SIGTERM シグナルハンドラ。
running フラグを 0 にセットして prefork のメインループを終了させます。
static int create_listen_socket ( int port )listen ソケットを作成してバインドし、待ち受けを開始します。
listen ソケットのファイルディスクリプタ。
失敗した場合は exit() で終了します。
static void worker_loop ( int server_fd, int worker_id, int conns_per_worker )ワーカープロセスのメインループ (prefork モード用)。
conns_per_worker == 1 の場合: accept() → g_session_fn() を繰り返す従来の逐次処理。
conns_per_worker > 1 の場合: epoll を使ったイベントループで最大 conns_per_worker 本のコネクションを シングルスレッドで同時処理します。容量に達すると server_fd を epoll から 除去して新規 accept を止め、空きが生じると再登録して受け付けを再開します。
void platform_init ( ClientSessionFn session_fn )プラットフォーム初期化 (Windows: WSAStartup / Linux: no-op)。
void platform_cleanup ( void )プラットフォーム後処理 (Windows: WSACleanup / Linux: no-op)。
int dispatch_internal_args ( int argc, char *argv[] )内部起動引数を処理します。
Windows では --child <handle> / --worker <pipe> を検出して処理します。 Linux では常に 0 を返します。
内部起動引数を処理した場合は 1、通常起動の場合は 0 を返します。
void run_fork_server ( int port )fork モードのサーバーを起動します。
void run_prefork_server ( int port, int num_workers, int conns_per_worker )prefork モードのサーバーを起動します。
static volatile sig_atomic_t running = 1;#define MAX_EPOLL_EVENTS 64epoll_wait で一度に取得する最大イベント数。