setsockoptは、ソケットのオプション設定をするUNIXシステムコール・・・。
よく使うオプションとしては、SO_REUSEADDRが挙げられる・・・。
サーバプログラムで、同じポート番号でbindを繰り返すと、"Address already in use"が出て、失敗する事がある・・・。
Geekなぺーじ:TCPを使う(サーバ、SO_REUSEADDR)
そこで、setsockoptでSO_REUSEADDRを有効にすることで、再度同じポート番号でbindできるようにする・・・。
セットするオプションの値を格納するint型変数optvalを用意し、1に初期化・・・。
ソケットを作成し、addrの設定をする・・・。
setsockoptで、socに対して、SO_REUSEADDRを1(有効)にする・・・。
第2引数はオプションレベルというものだが、SOL_SOCKETは常に指定するので、これでいい・・・。
第4引数はSO_REUSEADDRの場合は、本来1バイトcharで指定するが、optvalがintなので、(const char *)にキャストしている・・・。
オプションによって渡す値の型が違うため、setsockoptの引数型はvoid *で定義されていて、第5引数にサイズも指定する・・・。
setsockopt
戻り値が-1ならエラー処理・・・。
成功したら"setsockopt(SO_REUSEADDR) success."を出力・・・。
続いて、bindする・・・。
そして、成功したら"bind success."を出力・・・。
$ ./setsockopt soc = 3 setsockopt(SO_REUSEADDR) success. bind success. $ ./setsockopt soc = 3 setsockopt(SO_REUSEADDR) success. bind success. $
bindを繰り返しても成功する・・・。