2017-02-22 4 views
3

私はperl Net :: SSH2 v0.48を使用しており、stdinからの入力を読み取るリモートスクリプトを実行しようとしています。この接続のチャネルは、特定の要件にvt100 ptyを使用しています。 stdinにデータを書き込んだ後、$channel->send_eof();も呼び出しています。しかし、リモートスクリプトはEOF文字をまったく受け取っていないようです。リモートスクリプトはPythonで、sys.stdin.read()のようにstdinから読み込み、EOFを取得するまでハングします。この問題は、ptyを無効にするか、または入力ペイロード(EOF文字)を使用してchr(4)を追加すると解決されます。ptyモードとEOFのPerl Net :: SSH2

質問:

  1. send_eof()が動作していない理由を任意のアイデア?
  2. この問題を解決する最善の方法は何ですか?
  3. ptyが有効になっている場合、send_eof()は必須ではないと思いますか?

P.生産コードが複雑すぎて問題を説明することができず、最小限のコードの作業バージョンを準備するには時間がかかるので、私は今すぐコードスニペットを含めません。しかし、すぐにコードサンプルで質問を更新しようとします。

+0

バージョン0.48はかなり古いバグです。あなたは最近のものを使うべきです。 – salva

答えて

2

ptyが有効な場合、send_eof()は不要であると仮定できますか? docsから

send_eofは、リモート側にEOFを送信します。

EOFが送信された後、リモートの STDINチャネルにデータが送信されなくなる可能性があります。

PTYがチャネルに対して要求された場合、EOFはリモートサーバーによって無視されることがあります。

+0

'EOFはリモートサーバによって無視されるかもしれません.'というのは、それを私の入力データの一部として追加してもEOFが無視されることを意味しないのですか?明らかにそれは起こっていませんが、完全な画像を得るためにはさらに詳しい情報があるようです。 – Samiron

+0

Ttyデバイスでは、接続の一方の側だけを閉じることはできません。そのため、チャンネルレベルでのEOFリクエストは無視されます。 – salva

関連する問題