Linux SIGPIPE 信号
以下では、TCP の通信当事者のうち、説明の便宜上、通信当事者を A と B に置き換えます。
TCP プロトコルによれば、A が接続を閉じた後も B がデータを送信し続けると、B は A の RST 応答を受信します。 B がデータの送信を続ける場合、システムは SIGPIPE 信号を送信して、接続が切断されたことを通知し、送信を停止します。
SIGPIPE シグナルに対するシステムのデフォルトの処理動作では、プロセス B を終了させます。
SIGPIPE 信号に対するオペレーティング システムのデフォルトの処理動作は非常に不親切です。これを分析してみましょう。
TCP 通信は全二重チャネルであり、2 つの単信チャネルに相当し、接続の各端が 1 つのチャネルを担当します。
ピアが「閉じる」場合、意図は 2 つのチャネル全体を閉じることですが、ローカル エンドは FIN パケットのみを受信します。
TCP プロトコルの規定によれば、一方の端が担当する一方向チャネルを閉じると、引き続きデータを受信できますが、データを送信できなくなります。
言い換えると、TCP プロトコルの制限により、通信側はピアのソケットが close または shutdown を呼び出したかどうかを知ることができません。
リーリーシャットダウン関数のパラメータ「how」は、SHUT_RD、SHUT_WR、または SHUT_RDWR を閉じるように設定できます。これは、受信チャネルと送信チャネルを個別に閉じるか、送信チャネルと受信チャネルを同時に閉じるかを示すために使用されます。
FIN パケットを受信したソケットで read/recv メソッドを呼び出します。受信バッファが空の場合は 0 が返され、これは接続が閉じられたことを示すとよく言われます。ただし、最初に write/send メソッドを呼び出したとき、送信バッファに問題がなければ正しい書き込みが返されます(つまり、write/send 関数の戻り値が 0 より大きい)が、送信されたメッセージにより、ピアは RST メッセージで応答します。前回プログラムが write/send 関数を呼び出したときは正常だったため、再度 write/send 関数を呼び出そうとしたときに SIGPIPE シグナルが生成され、プロセスが終了してしまいました。
このデフォルトの動作は、同時に多くのクライアントにサービスを提供する必要がある、特にバックエンド サービス向けのプログラムを開発するためのものです。プロセス全体が終了できず、他のクライアントにサービスを提供し続けることはできません。特定のクライアントへの接続。
この現象を回避するには、SIGPIPE 信号をキャプチャして処理するか、信号を無視することができます。信号を無視するためのコードは次のとおりです:
リーリーこの設定の後、write/send メソッドが 2 回目に呼び出されるとき、-1 が返され、errno エラー コードが SIGPIPE に設定されるため、プログラムはピアが閉じられたことを認識します。
以上がLinux SIGPIPE 信号の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

win10でtcp/ipプロトコルをリセットするにはどうすればよいですか?実際、その方法は非常に簡単で、ユーザーがコマンド プロンプトに直接入力し、ctrl Shift Enter キーの組み合わせを押して操作を実行するか、reset コマンドを直接実行して設定することができます。 Windows 10 で TCP/IP プロトコル スタックをリセットする方法をユーザーに注意深く紹介します。 Windows 10 で tcp/ip プロトコル スタックをリセットする方法 1。 管理者権限 1. ショートカット キー win R を使用してファイル名を指定して実行ウィンドウを直接開き、「cmd」と入力し、ctrl Shift Enter キーの組み合わせを押し続けます。 2. または、スタート メニューでコマンド プロンプトを直接検索し、右クリックします。

TCP クライアント TCP プロトコルを使用して継続的な対話を実現するクライアントのサンプル コード: importsocket#クライアント設定 HOST='localhost'PORT=12345#TCP ソケットを作成し、サーバーに接続 client_socket=socket.socket(socket.AF_INET,socket . SOCK_STREAM)client_socket.connect((HOST,PORT))whileTrue:#ユーザー入力を取得 message=input("送信するメッセージを入力してください:&

Kubernetes クラスターが構成されていると仮定して、CentOS をベースに Nginx 用の仮想マシンを作成します。実験での設定の詳細は次のとおりです。 Nginx (CenOS8Minimal)–192.168.1.50KubeMaster–192.168.1.40KubeWorker1–192.168.1.41KubeWorker2–192.168.1.42 ステップ 1) nginx ソフトウェア パッケージが含まれていないため、epel リポジトリをインストールします。 CentOS システムのデフォルト リポジトリ。そのため、e をインストールする必要があります。

ここで言う「コネクション指向」とは、コネクションを確立し、コネクションを利用し、コネクションを解放する必要があることを意味します。接続の確立とは、よく知られている TCP スリーウェイ ハンドシェイクを指します。接続を使用する場合、データは 1 回の送信と 1 回の確認の形式で送信されます。また、一般的な TCP 4 波である接続の解放もあります。

1 つの TCP 接続を使用して複数のファイルを送信することについてこのブログが書かれているのはなぜですか?最近関連の本を読んでいるのですが、単に Socket を使ってプログラミングするのは問題ありませんが、これはいくつかの基本的な概念を確立するだけです。本当の問題に対してはまだ何もできません。ファイルを転送する必要がある場合、データ (バイナリ データ) を送信しただけのように見えますが、ファイルに関する一部の情報 (ファイル拡張子) が失われていることがわかります。そして、毎回 1 つのファイルを送信するために 1 つのソケットしか使用できないため、連続してファイルを送信する方法はありません (ファイルの送信を完了するにはストリームを閉じることに依存しているため、実際にはファイルの長さがわかりません。したがって、1 つのソケット接続がファイルを表す場合にのみファイルを送信できます)。

かつて、面接でよくある質問で、「ブラウザに URL が入力されてからページが表示されるまでの過程で何が起こっていますか?」という質問がありました。予習をした学生ならほとんど答えられると思いますが、「受信したHTMLに数十個の画像タグが含まれている場合、どのような方法で、どのような順序で、どれだけの接続が確立され、どのようなプロトコルでダウンロードされるのか」と続けて尋ねると、これらの画像はどうでしょうか?

以下では、説明の便宜上、TCPの通信当事者のうち、通信当事者をA、Bに置き換えて説明する。 TCP プロトコルによれば、A が接続を閉じた後も B がデータを送信し続けると、B は A の RST 応答を受信します。 B がデータの送信を続ける場合、システムは SIGPIPE 信号を送信して、接続が切断されたことを通知し、送信を停止します。 SIGPIPE シグナルに対するシステムのデフォルトの処理動作は、プロセス B を終了させることです。 SIGPIPE 信号に対するオペレーティング システムのデフォルトの処理動作は非常に不親切です。これを分析してみましょう。 TCP 通信は全二重チャネルであり、2 つの単信チャネルに相当し、接続の各端が 1 つのチャネルを担当します。反対側が「閉じる」場合、2 つのチャネル全体を閉じることが意図されていますが、ローカル エンドは FIN パケットのみを受信します。 TCP プロトコルの規定に従って、

データ通信におけるチャネル伝送速度の単位は bps で、これは「ビット/秒」または「ビット/秒」を意味し、数値的には 1 秒あたりに伝送されるデータ コードを構成する 2 進数のビット数に等しくなります。 、「ビットレート」とも呼ばれます。ビットレートは単位時間当たりに伝送されるビット数を表し、デジタル情報の伝送速度を測るのに使用され、画像ストレージの各フレームが占めるビット数と伝送ビットレートに基づいて、デジタル画像情報の伝送速度が決まります。計算することができます。
