[ C++で開発 ]
C++でも、ネットワーク通信のライブラリが各種揃ってきている昨今、いまさらソケットAPIを使用したネットワークプログラミングをする機会は少ないかもしれません。
しかし、ネットワーク通信の基盤であるソケットAPIとその動きを知っていないと、いざ問題があった場合に対応できません。また、高度なネットワーク処理を行いたい場合に、ライブラリにない機能を使って解決できる必要もあるでしょう。
ソケットからデータを受信するときに使用する代表的なAPIが、recvです。通常recv呼び出しはデータが受信するまでブロックします。ここで、ある一定時間データが受信しない場合、ブロックを解除してエラー処理等を行いたいとします。
それには、以下のプログラミング方針が考えられます。
SO_RCVTIMEOは、OSによってサポートされていないこともあります。
OS | 対応 | 備考 |
Linux | カーネル2.3.41以降 | |
Windows | WinSock 2の実装 | |
Solaris | Solaris 10時点で未対応 |
使い分けは、1つのソケット受信ブロックだけ対処すればよいなら簡単な1.
ソケットのアドレスは、