ソケットが受信中であるかどうかを確認する方法は?

ソケットが受信中であるかどうかを確認する方法は?

定期的にソケットの状態を観察したいので、コマンドを介してソケットの状態を確認する必要があります。

現在、すべてのリスニングソケットをリストしssますgrep

ss -l | grep -q /run/php/php7.0-fpm.sock

ソケットの状態を確認するより良い方法はありますか?

ベストアンサー1

接続を試み、接続を切断する前に何も渡さず、何も受け入れない場合は、いくつかの情報を取得できます。

socat -u OPEN:/dev/null UNIX-CONNECT:/run/php/php7.0-fpm.sock

少なくとも4つの可能な結果があります。

  • ソケットが存在しない場合、エラーは、No such file or directory終了状態はです1

  • ソケットへの書き込みアクセス権がない場合、エラーは、Permission denied終了ステータスはです1。この場合、プロセスが受信中かどうかは不明です。

  • ソケットへの書き込みアクセス権があり、受信プロセスがない場合、エラーは、Connection refused終了ステータスはです1

  • ソケットへの書き込み権限があり、プロセスがリッスンしている場合は接続が確立されます。このコマンドは何も送信せず(たとえばcat /dev/null)、何も受信しようとしないため、-uほとんどすぐに終了します。終了ステータスはです0

    短いですが、まだ接続が行われています。リスニングプロセスは、1つの接続のみを許可し、サービスを実行した後に終了するか、一度に1つずつ接続を許可するように構成できます。この場合、プロービング接続が最大化されます。これは望ましくありません。しかし、実際には、ほとんどのリスニングプロセスが複数の接続をサービスし、切断されたクライアントを無慈悲に処理できると期待しています。

メモ:

  • 終了ステータスを生成する状況を区別するには、stderrを解析する必要があります1
  • プロセスは、自分が聞いているという事実をどのプロセスにも知らせません。

おすすめ記事