Unix Socket-Server Examples
広告
プロセスをTCPサーバーにするには、以下の手順に従う必要があります−
-
socket()システムコールでソケットを作成します。
-
bind()システムコールを使用してソケットをアドレスにバインドします。 インターネット上のサーバーソケットの場合、アドレスはホストマシン上のポート番号で構成されます。
-
listen()システムコールでの接続をリッスンします。
-
accept()システムコールで接続を受け入れます。 この呼び出しは、通常、クライアントがサーバーに接続するまでブロックします。read()およびwrite()システムコールを使用してデータを送受信します。
-
accept文と次のコードを無限ループ接続が確立されたら、fork()を呼び出して新しいプロセスを作成します。
-
子プロセスはsockfdを閉じ、doprocessing関数を呼び出し、新しいソケットファイル記述子を引数として渡します。 2つのプロセスが会話を完了すると、doprocessing()が返すことで示されるように、このプロセスは単に終了します。
-
親プロセスはnewsockfdを閉じます。 このコードはすべて無限ループ内にあるため、acceptステートメントに戻り、次の接続を待機します。
ここで、これらの手順をソースコードの形式にしてみましょう。 このコードをファイルサーバーに入れます。cをgccコンパイラでコンパイルします。
複数の接続を処理する
サーバーが複数の同時接続を処理できるようにするには、上記のコードで次の変更を行います−
次のコードseqmentは、doprocessing関数の簡単な実装を示しています。
広告