iOSシミュレータ(おそらくMacとFreeBSDと同じTCPスタックを使用)からのループバックアドレスに非ブロッキング接続を行うと、サーバープロセスが実行されていなくても常に成功します。ループバックアドレス(127.0.0.1またはlocalhost)にノンブロッキング接続
タイムアウトがゼロのselect()を使用して接続が成功したことを検出しました。したがって、select()が0を返す限り、接続が進行中であると仮定します。-1を返した場合はエラーが発生し、1が返された場合はソケットが読み込み可能になります(サーバが応答したはずです)私は、接続が成功したことを報告した後に読み始めます。
これは、ループバックを除くすべてのアドレスで正常に動作します。ループバックでは、サーバーが実行されていない場合でも、select()は常に1を返します。だから、私は読んで始めます。失敗すると私はそれを処理します。しかし、私はselect()を使ってこれを検出したはずです!
私は実際にconnect()からEINPROGRESSを取得しています。もう一度確認してお知らせします。 – Plumenator
Yup、EINPROGRESS。 – Plumenator
あなたは 'connect'の結果をチェックしなかったと申し訳ありません。ちなみに、あなたは読書のために選んでいるのですか?少なくともFreeBSDの 'connect(2)'マン・ページは、書き込みのために選択すべきであることを示しているようです。 – Grrrr