TOP

ネットワーク技術

ソケット通信(TCP/IP)基礎


server側 client側
socket() socket()
接続待ちソケット作成 通信用ソケット作成
setsockopt() setsockopt()
ソケットオプション設定
※TIME_WAIT対策にSO_REUSEADDRを設定
ソケットオプション設定
※TIME_WAIT対策にSO_REUSEADDRを設定
bind() bind()
アドレス割付 アドレス割付(省略可)
listen
接続待ちキュー数設定(キュー数はOS上限が多くの場合5)
poll()
接続待ちソケットイベント発生待ち connect()
accept() 接続要求(接続確立後復帰)
接続確立&
通信用ソケット生成
send()/recv() send()/recv()
データ送受信(poll()でのイベント発生待ちも可)
※回線切断はPOLLIN検出、recv()が0復帰&EINTR
データ送受信(poll()でのイベント発生待ちも可)
※回線切断はPOLLIN検出、recv()が0復帰&EINTR

ソケット関連

リンク

記事「ソケットオプション SO_REUSEADDRの利用とTIME_WAITソケットの関係」

TIME_WAITになったソケットをSO_REUSEADDRオプションを使用することで利用した場合の調査報告。結論は「TIME_WAITが存在する間はbindできない,という問題は解決するが,TIME_WAITが消えるわけではない. あまりにも多くのソケットを短時間で利用すると, 多くのソケットがTIME_WAIT状態になってしまい, 利用可能なポートを使い切ってしまう,という問題の解決にはならない 」




setsockoptおよびgetsockoptの解説

level level解説 option get/set opton解説 optval
SOL_SOCKET SO_BROADCAST get/set ソケットでブロードキャスト送受信を行う場合に指定する。 boolean型
1:ブロードキャスト送受信可
0:ブロードキャスト送受信不可
SO_REUSEADDR get/set ポート接続というアドレスを共有する2つのソケットを作成可能にする。TIME_WAIT状態になっているポート(bindしようとするとPort Already Usedのエラーとなる)をすぐに使用したい場合に指定する。詳細はこの報告記事を参照のこと。 boolean型
1:共有可
0:共有不可
get/set
SOL_IP get/set
get/set
get/set
SOL_IPV6 get/set
get/set
get/set
SOL_TCP get/set
get/set
get/set

TOP