#!/bin/sh
openssl s_server ...(省略)... &
bash上から、
$ ./openssl.sh
とすると、バックグラウンドでopensslのs_serverが起動する。NetBSD上で
$ ./openssl.sh
を実行すると、このs_serverにブラウザから接続できる。しかし、Linux上で./openssl.shを実行すると、ブラウザから接続できない。
openssl.sh経由ではなく、以下のように直接opensslを実行すると、ブラウザから接続できる。
$ openssl s_server ... &
openssl.sh経由と直接の違いをktraceで調べてみた。
直接opensslを動作させると、
1. opensslがselectを呼ぶ
2. selectから抜ける。
3. ブラウザからの接続があり、通信を行う。
となるのだが、openssl.sh経由だと、
1. opensslがselectを呼ぶ
2. selectから抜ける。
3. fdの0(STDIN)が切られているので、プログラムを終了する。
と動作しているようだ。
なぜLinuxとNetBSDで動作が違うのかが不明。
bashの違い? opensslの違い?
動作が違う原因はわからないが、opensslのSTDINをcloseしてはいけないという事はわかった。
以下のようにする事で、回避する事にした。
1. openssl.shの中でopenssl s_serverを起動する時には、&を付けない。
#!/bin/sh
openssl s_server ...(省略)...
2. openssl.shを起動する時に、&を付ける。
$ openssl.sh &
0 件のコメント:
コメントを投稿