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ツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
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("送信するメッセージを入力してください:&

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

TCP は、コンピュータ ネットワーク通信プロトコルの一種であり、コネクション型の伝送プロトコルです。 Javaアプリケーション開発において、TCP通信はクライアントとサーバー間のデータ送信、音声や映像のリアルタイム送信など、さまざまなシーンで広く利用されています。 Netty4 は、サーバーとクライアント間のデータ交換プロセスを最適化し、効率性と信頼性を高めることができる、高性能、拡張性の高いネットワーク プログラミング フレームワークです。 TCP 通信に Netty4 を使用する具体的な実装手順は次のとおりです。

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

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

TCP と IP はインターネットにおける 2 つの異なるプロトコルです: 1. TCP はトランスポート層プロトコル、IP はネットワーク層プロトコル; 2. TCP はデータ パケットのセグメント化、並べ替え、確認、再送信などの機能を提供します。プロトコルはデータ パケットの送信元アドレスと宛先アドレスを提供する役割を果たします; 3. TCP は接続指向のプロトコルですが、IP プロトコルはコネクションレスです; 4. TCP はフロー制御と輻輳制御も提供します。

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