0

質問1

SUSE の man ページから、ソケット接続オプションの以下の詳細を取得します

開始ソケットが接続モードの場合、connect() は、アドレス引数で指定されたアドレスへの接続を確立しようとします。接続をすぐに確立できず、ソケットのファイル記述子に O_NONBLOCK が設定されていない場合、connect() は、接続が確立されるまで、指定されていないタイムアウト間隔までブロックします。接続が確立される前にタイムアウト間隔が切れた場合、connect() は失敗し、接続の試行は中止されます。connect() が、ブロックされて接続の確立を待機している間に捕捉されたシグナルによって割り込まれた場合、connect() は失敗し、errno を [EINTR] に設定しますが、接続要求は中止されず、接続は非同期的に確立されます。

質問 : 上記の内容は AIX OS (特に接続タイムアウト、タイムアウト待機など) に有効ですか? AIX の man ページ (5.1 および 5.3) には表示されないため

質問2

属性がaのクライアントソケットがあります
。SO_RCVTIMEO 、SO_SNDTIMEO は 5 秒に設定されます。
b. AF_INET と SOCK_STREAM。
c. SO_LINGER のリンガーがオンで、時間は 5 秒です。
d. SO_REUSEADDR が設定されています。
クライアントソケットは O_NONBLOCK ではないことに注意してください。

質問 : O_NONBLOCK が設定されておらず、SO_RCVTIMEO と SO_SNDTIMEO が 5 秒に設定されているため、これはどういう意味ですか?

を。NON Blocking または Blocking で接続しますか?
b. ブロックする場合、それは時限ブロックですか、それとも「無限」の時間ブロックですか?
c. 無限の場合、タイムアウトが t 秒の O_BLOCKING である「接続」システムコールを確立するにはどうすればよいですか。

質問が非常に素朴で申し訳ありません。
ご意見をお寄せいただきありがとうございます。

4

2 に答える 2

2

すべて、
徹底的な検索とスキャンの後、最終的に私の質問に対する答えを見つけることができました.
同じ問題に直面している可能性のある他の人の助けになるように投稿しています。

質問 : 上記の内容は AIX OS (特に接続タイムアウト、タイムアウト待機など) に有効ですか? AIX の man ページ (5.1 および 5.3) には表示されないため

答え

多くの検索と AIX サポート エンジニアの助けから、man ページは POSIX 標準に準拠しており、AIX と SUSE OS の両方で有効であることがわかりました。

したがって、未指定のタイムアウト間隔のまれなシナリオの場合に、接続システム API (O_BLOCK) がブロックされる可能性があることが証明されています。

質問 : O_NONBLOCK が設定されておらず、SO_RCVTIMEO と SO_SNDTIMEO が 5 秒に設定されているため、これはどういう意味ですか?

を。NON Blocking または Blocking で接続しますか?
b. ブロックする場合、それは時限ブロックですか、それとも「無限」の時間ブロックですか?
c. 無限の場合、タイムアウトが t 秒の O_BLOCKING である「接続」システムコールを確立するにはどうすればよいですか。

答え

a. O_NONBLOCK が SO_RCVTIMEO および/または SO_SNDTIMEO に指定されている場合、それらの API、つまりそれぞれ recv および send API にのみ適用されます。

b. 呼び出しをブロックするために接続 API が使用されている場合、はい、不特定の間隔で接続をブロックできます。

以下のリンクは、ソケットプログラミングの内部を理解するための優れたガイドであることが証明されています。

" http://www.ibm.com/developerworks/aix/library/au-tcpsystemcalls/index.html "

私の質問に時間を割いてくれてありがとう。

于 2010-05-20T16:44:04.780 に答える
0

質問 1: そこにあるものはすべて AIX に有効なようです。タイムアウトが指定されていない理由は、プロトコル固有であるためです。IBM の資料 (以下のリンク) で「接続」を検索してください。2 番目のヒットは、関心のある一般的なディスカッションです。

通常、AIX は BSD モデルを使用します。Linuxが何を使用しているのかわかりません。これは従来の BSD モデルに非常に近いと思いますが、いくつかの微妙な違いがあることも知っています。

質問 2: IBM 5.3 のドキュメントにアクセスして検索します。たとえば、SO_RCVTIMEO は使用されていません。確かに、いくつかの実験を行う必要がありますが、接続がブロックされることが予想されます. それを妨げるものは何も見えません。それは永久にブロックされます。パート 2c 2 つの方法のいずれかを実行します。簡単な方法は、タイマーを設定することです。タイマーがポップすると、システム コールは EINTR で返されます。もう 1 つの選択肢は、これを O_NONBLOCK に設定し、タイマー引数を指定して select を使用して、接続するか接続しないまで待機することです。繰り返しになりますが、正確にコードを実験してデバッグする必要があります。

于 2010-05-15T16:04:42.483 に答える