Andrew Gierth 氏 ( andrew@erlenstar.demon.co.uk) より:
fcntl(soc, F_SETFL, O_NONBLOCK) は他のファイルフラグを全て
潰してしまうので、技術的には正しくありません。ですが一般的にはそ
のようにして逃げています。それはその他のフラグ(例えば 
O_APPEND) はソケットに対してはほとんど当てはまらないからで
す。同様に手荒な調子でブロックモードに戻すのには fcntl(soc,
F_SETFL, 0) を使います。
これを正しく行なうには、F_GETFL を使って現在のフラグを取得
し、O_NONBLOCK フラグをセットあるいはリセットし、そして
F_SETFL を使ってフラグを設定します。
ああそうそう、フラグはどんな方法でもお好きな方法で変更できます。
Andrew Gierth 氏 
(
andrew@erlenstar.demon.co.uk) は select() と
connect() を使用する以下のような手順を概説してくれました。
これは connect() 呼び出しにおいてタイムアウトを入れることが
できるようにします。
もしコネクションが成功すれば:
もしコネクションが失敗すれば:
これを例証するサンプルコードは、socket-faq のプログラム例の 
connect.c のファイルに見ることができます。