追加読書

追加読書

接続を受け入れてからすべての入力を削除する(テストツールで使用するために)TCPリスナーを実装しようとしています。

私は現在使用していますが、socat - tcp-listen:2003,fork,reuseaddr入力はstdoutに印刷されます。私はそれをしたくありません。

/dev/null現在位置にあるため、出力を次にリダイレクトできません。アルパイン/ソキャットドックコンテナ実際にはシェルを使用していないため、リダイレクトは機能しません。

を使用しようとすると、socat /dev/null tcp-listen:2003,fork,reuseaddrすべての接続がすぐに切断されます。おそらくsocat読めないからです/dev/null

すべてを床に落とすTCPリスナーを実装する最良の方法は何ですか?

答え1

socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr

答え2

最適というのは難しい基準ですが、これにはMicrosoft ExcelほどDockerが必要であることがわかります。 ☺

私たちはすでにEOFまで入力を読み込み、それを効果的に削除するUnixプログラムを知っています。

猫> / dev / null

これをTCPサーバーに変換するのは非常に簡単な練習です。 これがUCSPI-TCPのすべてです。 標準I / Oを使用するプログラムをインポートし、それを中心に単純なフレームワークをラップしてTCPサーバーにします。転送について心配することなく他のものに置き換えて、catサービス契約を変更することができます。同様に、UCSPI-TCPツールをUCSPI-LOCALツールと交換してくださいcat

複数のUCSPI-TCPツールセットがあります。ダニエル・J・バーンスタイン(Daniel J. Bernstein)が書いた。 Laurent Bercotが1つ書きました。 Gerrit Papeが1つ書きました。アダム・サンプソンが書いた。私は一つを書いた。さらに、複数のツールセットのツールを組み合わせて一致させることができ、意図的に簡単に組み合わせることができます。私のツールfdredirやLaurent Bercotのツールを使用することも、redirfd非対話型ツールを作成することもできますsh。 (最初の2つは本格的なツールよりもオーバーヘッドが低く、shnoshツールfdredirも組み込まれているため、チェーン接続によるオーバーヘッドをさらに回避できます。外部コマンド。)

これを行う方法はいくつかあります。

  1. Bernstein tcpserver(オリジナルまたはdjbwares、IPv6をサポートしていません)
    1. tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cat
    2. tcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cat
    3. tcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
  2. Hoffman tcpserver(IPv4 および IPv6 サポート、元の Bernstein 基本 DNS および INFO ルックアップ機能があり、オフにする必要があります)
    1. tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cat
    2. tcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cat
    3. tcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
  3. 私のtcpservershim(IPv4とIPv6の両方をサポートしていますが、それぞれに対して別々のインスタンスを実行する必要があり、より近代的なデフォルトがあります)
    1. tcpserver ::0 2003 fdredir --write 1 /dev/null cat
    2. tcpserver ::0 2003 redirfd -w 1 /dev/null cat
    3. tcpserver ::0 2003 sh -c 'exec > /dev/null cat'
  4. 私のUCSPI-TCPツール(LinuxとFreeBSDの両方でIPv4とIPv6の両方をサポート)
    1. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cat
    2. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cat
    3. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
  5. Bercot s6-tcpserver6s6-tcpserver4IPv4の代替)
    1. s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cat
    2. s6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cat
    3. s6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
  6. Bercot s6 - ネットワークツール(s6-tcpserver4IPv4の代替)
    1. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cat
    2. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cat
    3. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
  7. Pappu tcpsvd(IPv6をサポートしていません)
    1. tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cat
    2. tcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cat
    3. tcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
  8. Sampson onenetd(IPv4とIPv6の両方をサポートしますが、それぞれに対して別々のインスタンスを実行する必要があります)
    1. onenetd -6 ::0 2003 fdredir --write 1 /dev/null cat
    2. onenetd -6 ::0 2003 redirfd -w 1 /dev/null cat
    3. onenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'

選択肢を楽しむ

16進ダンプ -C 1>&2
または(なしsh

fdmove -c 1 2 16進ダンプ -C
テスト中のクライアントプログラムが実行する操作のローカルログを取得するためにサーバープログラムで使用されます。 ☺

追加読書

関連情報