同じポートへの複数の接続を受け入れる必要があります。私はC++でソケットを使用していますが、SSHのようなことをしたいと思っています。ssh user @ machine "ls -lathrR /"を実行して、最初のコマンドがまだ実行されている場合でも、同じマシンに対して別のコマンドを実行できます。
どうやってやるの?
ありがとう。
同じポートへの複数の接続を受け入れる必要があります。私はC++でソケットを使用していますが、SSHのようなことをしたいと思っています。ssh user @ machine "ls -lathrR /"を実行して、最初のコマンドがまだ実行されている場合でも、同じマシンに対して別のコマンドを実行できます。
どうやってやるの?
ありがとう。
必要なのはマルチスレッドソケットサーバーです。
このためには、リッスンするためにソケットを開く(そして着信クライアント接続を待つ)メインスレッドが必要です。これは、ある種のwhileループに入る必要があります。
次に、クライアントがそれに接続すると、accept()
関数はブロックを解除し、その時点で、それを処理するスレッドに要求を渡すことによって、クライアント要求を処理する必要があります。
サーバー側はループバックし、前のスレッドがタスクを実行している間、別の接続を待ちます。
必要に応じてスレッドを作成するか、より効率的なスレッドプールを使用できます(新しいスレッドの初期化にかかる時間を節約できます)。
詳細については、こちらをご覧ください。bind()
Web上で、具体的にlisten()
はaccept()
サーバー側からマルチスレッドサーバーソケットを探します。
あなたはとを読む必要があり::listen()
ます::accept()
。
前者は、リスニング用のソケットをセットアップします。::accept()
次に、新しい接続が到着するたびに戻るループを使用するループ(おそらく独自のスレッド内)が必要です。
次に、そのループは、受信したファイル記述子を渡す新しいスレッドを生成し、::accept()
そこからそのソケット上のすべてのI/Oを処理する必要があります。
古い質問は古いですが、OPの質問を理解した人は誰もいないと思います。
あなたはsshがどのように機能するかを誤解しています。sshを介してサーバーに複数のコマンド/複数の接続を送信する場合、実際には、接続しているサーバー上に、これらすべてのコマンドを受信しているプログラムは1つだけです。
Sshd(sshデーモン)はサーバー上で実行され、マルチスレッドソケットサーバーです(fduffの回答を参照)。これは、ポート22でリッスンし、すべての着信ssh接続を単独で処理する唯一のプログラムです。