68user's page 掲示板

Prev< No. 922〜924> Next  [最新発言に戻る] [過去ログ一覧]
No. 922 # へにか [URL] 2000/06/17 (土) 12:15:50
68user様、hsj様、ご教授、どうもありがとうございます。

68user様>backlog に 10 や 100 を渡すとどうなりますか?

backlogを、思い切って128に増やして、netstat 1 で、1秒刻みで出力した結果を
以下に示します。
前回、netstatを、(間抜けなことに)手動で何回も実行した結果を示しましたが、
そのためか、前回とは異なる結果になってしまいました。すみません・・・

backlog = 128
Local Address = n:80 は、 7
Local Address = n:8080 は、 5
Local Address = n:14xx は、 12 (14xx=1400番台)

backlog = SOMAXCONN
Local Address = n:80 は、 8
Local Address = n:8080 は、 5
Local Address = n:15xx は、 12 (15xx=1500番台)
Local Address = n:ingreslock は、 1 (←ほとんど出ない)

上記の結果から、backlogを増やしても、大差ないみたいです。

hsj様のご示唆から考えて、proxyを経由しない場合を調査しましたので、以下に
示します(上記の結果に対応しています)。

Local Address = n:80 は、 5
Local Address = n:16xx は、 5 (16xx=1600番台)
(但し、Netscape3.0)

確かに、おっしゃるとおり、
hsj様> 5より多くのコネクションを張らない
ようですね。

でも、proxy経由しないほうが、ちゃんと画像が表示されるので、今、僕は
混乱の極みです(今までも混乱してますが)。
proxy経由すると、コネクションが張られっぱなしみたいなので、どうも、
backlogが怪しいわけではない??? となると、proxyが黒ですね。

hsj様>httpサーバがContent-Lengthを返してくれないコンテンツには、
hsj様>クライアント側からどのように対処するべきでしょうか。

このご質問が、良い示唆になって、ありがたいです。ここを対処すれば、

>へにか@箇条書き [URL] 2000/06/14 (水) 23:02:08
>a) 事の発端は、
{略}
>全ての要求を受付てくれない(logで確認済み)。

が、うまく解決できそうな予感がします。

追伸1:
だんだん、わかってきたような気がして(実際にわかってるかどうかはおいといて)、
嬉しいです。こちらの掲示板でお世話になって、よかった、と思っています。

追伸2:
明日(日曜)から、1週間(弱?)程度、出張に行ってきますので、書き込みが
遅れるかも知れません。色々アドバイス頂いているのに、大変申し訳ないです。

No. 923 # 68user 2000/06/17 (土) 13:07:57
@james さん
> それは、Xlibだけで作成するのはやめようと言う事。
賢明な選択でしょう。

> やっぱり絶対にマニュアル不足ですかね?
だと思います。この前のチャットのログや hsj さんの情報を
元にして何か本を買わないと苦しいと思います。

UNIX で GUI アプリを作るなら、Gtk+、Qt、Perl/Tk などの
選択肢もあります。入門書は結構出てます。ただ「困っても
その本を読めば絶対にわかる」といったレベルまで 徹底的に
解説した本はないですね。

ただ、仕事に使えるほど熟成しているかというと、ちょっと不安ですが。
# Gtk+ や Qt って、もう API の仕様は固まったのかしら?

@hsj さん
> winsock-ver1のSOMAXCONNはホントに5です。ネタじゃなく。
> winsock-ver2になってはじめて0x7fffffffになりました。
なるほど。どうもです。

> サーバ側からの切断を待っている状態ですが、
> どうもこちら側から切らなければいけないようで、
HTTP/1.0 なら常にサーバ側から切ってくれますので、
    while (<SOCKET>){ print }
でいけるはずです。

マルチスレッドなら select で待って、
    $len = read(SOCKET,$buf,8192);
    if ( ! $buf ){ 切断された } # $len==0 の方が better かな?
てな感じでどうでしょうか。


@へにかさん
> proxy経由すると、コネクションが張られっぱなしみたいなので、どうも、
> backlogが怪しいわけではない??? となると、proxyが黒ですね。
ですね。本来、proxy がやってきたクライアントをさくさく accept
していれば、SOMAXCONN が 1 でも影響は出ないはずですから。
うまくマルチスレッド化できているかどうか調べてみて下さい。

なお、
> Local Address = n:8080 は、 5
というのは accept 済のコネクションと accept 前の OS がキューイング
しているコネクション、両方の合計が 5 ということです。なので、
この調べ方はあくまでも目安にしかなりません。念のため。

厳密に調べたければ
> あと、お使いの環境での最大接続数を調べるには、1つのポートにがんがん
> 接続してみればわかると思います。
をやってみてください。

No. 924 # hsj 2000/06/18 (日) 07:23:19
@68userさん
>HTTP/1.0 なら常にサーバ側から切ってくれますので
はい、そのハズなのでそれを待っているのですが、
#ちなみにCでつくっています
どうも、なかなか切ってくれないようなのです・・・
・・・というのが疑問だったのですが、解決しました:)
つくった機能のうち、環境変数の追加と削除で、
深い考え無しに、「Connection: Keep-Alive」を追加していました。
さらに追い撃ちで、HTTP/1.0にもかかわらず、
httpdによってはコレを解釈してくれているようで。
基本に戻ってrfc2616ながめてて気が付きました・・・あぁマヌケ。
そこで、この環境変数を「Connection: close」に修正したところ、
期待通り、httpd側からサクサク切ってくれるようになりました。
なにはともあれ、ありがとうございました。

@へにかさん
もしかして、へにかさんのおっしゃっておられる、
「プロキシを通すとコネクションが張られっぱなしになる」というのも、
この辺りと関係がないでしょうか?

Prev< No. 922〜924> Next  [最新発言に戻る] [過去ログ一覧]