68user's page 掲示板

Prev< No. 921〜926> Next  [最新発言に戻る] [過去ログ一覧]
No. 921 # hsj 2000/06/17 (土) 04:45:06
はじめまして。
ずっとROMオンリーだったのですが、書きこんでみます:)

@へにかさん
>因みに、SOMAXCONNをperlで表示させると、 5 でした
winsock-ver1のSOMAXCONNはホントに5です。ネタじゃなく。
winsock-ver2になってはじめて0x7fffffffになりました。
思うに、perlはwinsock-ver1のヘッダを使っているのではないでしょうか。
さらに、テストされているブラウザはIEかネスケだと思いますが、
どうもブラウザ側が、5より多くのコネクションを張らないようですね。
これはおそらく、前述のwinsock-ver1にも対応させるためだと思われます。
#自信は無いです(笑
なので、プロキシ側でいくらbacklogを増やしても、
ブラウザ側が接続しに来てくれないんだと思います。

@jamesさん
XとMotifを使っての開発は、かなり昔にHPとSolarisで行った事があるのみなのですが、
#もうほとんど忘れています(苦笑
その時に非常に役に立った書籍として、
・日刊工業新聞社「X-Window Ver.11 プログラミング」
・日刊工業新聞社「OSF/Motifプログラミング 」
の2冊をあげてみます。
見た目がかなり初心者向けっぽいのですが、
なにもわからなかった頃から、だいぶ理解できてきた頃まで、
ずっと役に立ってくれました。
オススメです。
#ちょっと検索かけたら片方だけでてきました↓
http://www.pro.or.jp/~fuji/computerbooks/unix-x/osfmotif.nikkan.html

@68userさん
どうも、はじめまして。
いきなりでアレなのですが、:)
httpサーバがContent-Lengthを返してくれないコンテンツには、
クライアント側からどのように対処するべきでしょうか。
現状の自作proxy(この書き込みもコレ経由です)では、
サーバ側からの切断を待っている状態ですが、
どうもこちら側から切らなければいけないようで、
毎回タイムアウトで自分から切るハメになっています。
#例えば、下でへにかさんが示しておられるURLから示されているGIF画像もそうですね。
IEやらネスケやらのブラウザはやってくれているようなので方法はあると思うのですが、
探し方が悪かったのか見つかりませんでした。
なにか、普通こうするだろ、って言うような方法というのは有るのでしょうか?
もし知っていらっしゃったら、ぜひ教えてください。
よろしくおねがいします。

・・・でも、画像ファイルの中を見て長さを取得してたりしたらイヤだなぁ(笑

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側からサクサク切ってくれるようになりました。
なにはともあれ、ありがとうございました。

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

No. 925 # mark11 2000/06/18 (日) 16:10:42
はじめて書き込みます.UNIX初心者のものです.

ソース環境がひとつで2つのアプリを作っているのですが,
毎回できたオブジェクトを手作業で退避・圧縮しています.
この作業をmakefileに記述したいのですが,次の記述でよい
でしょうか.

BAKDIR2 = /tmp/backup2/

test2.o.gz: test2.o
        cp -p test2.o $(BAKDIR2)
        gzip $(BAKDIR)/test2.o

ご指導よろしくお願いします.

No. 926 # 68user 2000/06/19 (月) 00:36:46
> 深い考え無しに、「Connection: Keep-Alive」を追加していました。
なるほど。HTTP/1.1 まわりではまるのは よくありますよね。
# Host ヘッダを付けず HTTP/1.1 を使ってはまるとか。

> この作業をmakefileに記述したいのですが,次の記述でよいでしょうか.
よいように見えますが、そちらではうまく動いていないんですか?

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