2017-02-25 55 views
0

同じサブネット上に複数のipsを同時に接続する必要があります。 買う時間が長すぎます! (ほぼ25秒)、すべての "connect()"機能が完了するまで待ちます!Cソケットの "connect()"機能にタイムアウトを設定するには?

この動作をwinsock、CPPでどのように最適化できますか? Unixでは、Linuxでは、Windowsの、NetWare、および他のすべてのプラットフォーム上で 私は「select」と呼ばれる気にいらについて見つけるが、aperrentlyそれはとてもLinux用にのみ機能します。..

+0

https://msdn.microsoft.com/en-us/library/ms740141(VS.85).aspxによると、MS-Windowsには 'select()'のバリエーションがあります。あなたはRTFMする必要があります。 –

+0

selectはWindowsで利用できますが、POSIXシステムと全く同じように動作しません。そして、より良い質問をする必要があります。 –

+0

libeventはLinuxやWindowsでも使用できる良いライブラリですが、非同期操作は本当にきれいで清潔です。 C++については、boost asioを考慮することができます – rajesh6115

答えて

1

select()作品は、私が今までそれをテストしています。

  1. ソケットを非ブロッキングモードにします。
  2. connect()を呼び出します。 EAGAIN/EWOULDBLOCKまたはEINPROGRESSで失敗します。
  3. に設定されたソケットを使用して、書き込み可能性を選択する、希望のタイムアウトでselect()を呼び出します。
  4. ソケットが書き込み可能になると、接続されます。あなたのタイムアウト期間内にそれが起こらない場合は、それを閉じます。そうでない場合は、それをブロッキングモードにリセットしてください。
関連する問題