基本TCPソケット2−3

並行サーバー

並行サーバーの骨格

pid_t pid;
int listenfd, connfd;

listenfd = socket(...);

bind(listenfd, ...);
listen(listenfd, backlog);

for (;;) {
  connfd = accept(listenfd, ...);
  if ( (pid = fork()) == 0 ) {//Child
    //子プロセスは、リスニングソケットをクローズ
    close(listenfd);

    //要求の処理
    doit(connfd);

    //このクライアントの処理は終了
    close(connfd);

   //子プロセスの終了
    exit(0);
  }
  //Parent
  close(connfd);//親プロセスは接続済みソケットをクローズ
}

参考文献

  • UNIXネットワークプログラミング スティーブンズ