0

最近、Linux でのネットワーク プログラミングの学習を始めましたが、リモート ホストへの接続が確立されているかどうかを検出する正しい方法がわかりません。ATM 確立されていないすべての接続は、epoll インスタンスに登録されます。EPOLLOUT フラグが 1 に設定されたイベントが到着すると、接続は確立済みとしてマークされます。これと同じくらい簡単ですが、私はこれを正しくやっています...

これを行うより良い方法はありますか?そうでない場合、ソケットが書き込み可能になるのを待つことは、接続が確立されたことを保証する良い方法ですか?

4

1 に答える 1

0

poll/epoll/select はすべて動作するはずです。connect(2)のマンページには 、EINPROGRESS を取得し、select または poll を使用して書き込み可能になることを確認することで完了を検出できると書かれています。次に、getsockopt を使用して SOL_SOCKET、SO_ERROR ステータスをチェックし、接続が成功したか失敗したかを確認します。

まだ試行中に接続を再試行すると、EALREADY になります。

したがって、これは文書化された方法であり、私には正しいように思えます。

于 2009-12-10T04:16:52.767 に答える