[解決済み] TCPソケットのconnect()がブロックされるか?
2022-02-08 23:54:16
質問
TLPI (The Linux Programming Interface)を読んでいるのですが、connect()について質問させてください。
私の理解では、listen() の保留中の接続数が "backlog" に達していない場合、connect() は直ちにリターンします。 そして、それはそうでなければブロックされます。(図56-2によると)
しかし、TCPソケットの場合は、サーバー側のaccept()が呼ばれるまで、常にブロックされます(図61-5参照)。
ということでよろしいでしょうか? というのも、サンプルコード(P.1265)では、 listen()を呼んで特定のポートをリッスンし、 accept()を呼ぶ前にそのポートにconnect()を呼んでいます。
ということは、この場合connect()は永遠にブロックされますよね?
ありがとうございます!
解決するには?
ネットワークには「すぐに」というものはほとんどなく、途中でモノがなくなったり、理論的にはすぐに行うべき操作が実際にはできなかったり、いずれにしてもエンド・トゥ・エンドの転送時間があります。
しかし
-
TCPソケットのconnect()は、ソケットディスクリプタをノンブロッキングモードにしない限り、ブロッキング操作となります。
-
TCPハンドシェイクはOSが行い、ハンドシェイクが終了するとconnect()が戻ってきます。(つまり connect() は、相手側が accept() を呼び出すまでブロックしない)
-
TCP ハンドシェイクに成功すると、サーバーアプリケーションにキューイングされ、後でいつでも accept() することができます。
関連
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】ポインタへの代入時に互換性のないポインタ型からの初期化警告が発生した
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】メモリー・クロバリング・エラー
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】配列型char[]が代入できない [重複]。
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?