BSDソケットインターフェースの話ですが。
ファイルディスクリプタをノンブロッキングに設定すると、読めるデータがない(受信バッファにデータがない)場合は read() / recv() から -1 が返ってきて、errno が EAGAIN に設定されます。一方これとは別に、ソケットに対して recv() する場合、第4引数(フラグ)に MSG_WAITALL を指定すると、第3引数で指定した分だけ読めるまで返ってきません(基本的には)。
Read the rest of this entry