68user's page 掲示板

Prev< No. 1667〜1683> Next  [最新発言に戻る] [過去ログ一覧]
No. 1667 # rosegarden 2001/01/26 (金) 16:38:08
>>1666 rosegarden
> なんか、FreeBSD の /usr/bin/perl は IPv6 に対応してない感じですね。
> 4-stable も 5-current(こちらは perl 5.6.0)も試しました。
> perldoc Socket6 して出て来る IPv6 の daytime のサンプルを試しましたが、
> socket: Protocol not supported
> などというエラーを返します。

原因が分かりました。ああ、余計なポストするんじゃなかったな。
FreeBSD の /usr/bin/perl はちゃんと IPv6 対応していますね。
私の場合 ports で Socekt6 インストールしたのですが、ちゃんと動きました。

ところで、Socket6.pm 持っている人は、サンプルが次のようになっていませんか?

use Socket;
use Socket6;

@res = getaddrinfo('hishost.com', 'daytime', AF_UNSPEC, SOCK_STREAM);
$family = -1;
while (scalar(@res) >= 5) {
        ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;

        ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);
        print STDERR "Trying to connect to $host port port $port...\n";

        socket(Socket_Handle, $family, $saddr, $proto) || next;
(以下略)

投稿した C プログラム眺めていて気がついたのですが、
        socket(Socket_Handle, $family, $saddr, $proto) || next;
って
        socket(Socket_Handle, $family, $socktype, $proto) || next;
のミスじゃありませんか?

# なんで投稿した直後に気が付くんだろう。
# 私の勘違いかなぁ? 最近ぼけているし...。

ちなみに、私の場合次のようにしたら、スクリプトはうまく動きました。
環境は 4-stable + perl 5.00503 + Socket6 です。

#!/usr/bin/perl
use Socket6;
use Socket;

@res = getaddrinfo('localhost', 'daytime', AF_UNSPEC, SOCK_STREAM);
$family = -1;

while(scalar(@res) >= 5) {
    ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;
    ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);

    print STDERR "Trying to connect to $host port port $port $family...\n";

    socket(Sock, $family, $socktype, $proto) || die "socket: $!";
    connect(Sock, $saddr) && last;

    close(Sock);
    $family = -1;
}
if( $family != -1 ){
    print "connected to $host port $port\n";
    while( defined($line = <Sock>) ){
        print "$line\n";
    }
    close(Sock);
}
exit;

# 穴があったら入りたいです。

No. 1668 # rosegarden 2001/01/26 (金) 17:10:37
>>1667 rosegarden
そうだ。補足です。下のスクリプトですが、
> socket(Sock, $family, $socktype, $proto) || die "socket: $!";
この部分の die 云々のところは next にして
> socket(Sock, $family, $socktype, $proto) || next;
とすると IPv6/IPv4 の daytime クライアントになります。私の場合には
最初から、/etc/rc.conf に ipv6_enable="YES" が入っているのと、
デバッグの意味もあって、上の die を入れておいただけです。

socket の三番目の引数は SOCK_STREAM とかそういうのが入ります。
私がはまったのは、サンプルをコピー & ペーストして書き換えたものを
使っていたからです。CPAN にある Socket6 は直っているかも知れません。
(でも、ダウンロードしたのは昨日の夕方ですが。)

# コピー & ペーストなんて、安直なことしたバチがあったんですね。

上のように直して、inetd.conf で IPv4 の方だけ有効にしておくと
% perl daytime6.pl
Trying to connect to ::1 port port 13...
Trying to connect to 127.0.0.1 port port 13...
connected to 127.0.0.1 port 13
Fri Jan 26 16:59:50 2001

という感じで、IPv6 が有効だと
% perl daytime6.pl
Trying to connect to ::1 port port 13...
connected to ::1 port 13
Fri Jan 26 17:01:16 2001

になります。IPv6 見てから、IPv4 見ると言うのは、システムによっては
変わるのでしょうか? とりあえず、うちの場合は telnet も ftp もこの順番です。

# しかし、なぜ投稿してから気がつくんだろう??
# 68user 様ならびに皆様、再三のゴミ書き申し訳ありません。

No. 1669 # 68user 2001/01/26 (金) 17:39:43
>>1667 rosegarden
> 私の場合 ports で Socekt6 インストールしたのですが、ちゃんと動きました。
うちの 4.2-STABLE だと
>>1662 68user
> Can't load '/home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so'
でしたが、会社の 4.1-RELEASE だとうまくいきました。うちの環境が
変だったのかもしれません。

>>1667 rosegarden
> socket(Socket_Handle, $family, $saddr, $proto) || next;
> って
> socket(Socket_Handle, $family, $socktype, $proto) || next;
> のミスじゃありませんか?
む、まさにそこではまってました。それを直すと動いたのですが、
この Socket6 って変じゃないでしょうか? 以下の echo クライアントが
デッドロックしてしまうようです。
    
    #!/usr/bin/perl
    use Socket6;
    use Socket;
    
    @res = getaddrinfo('localhost', 'echo', AF_UNSPEC, SOCK_STREAM);
    $family = -1;
    
    while(scalar(@res) >= 5) {
            ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;
            ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);
            print STDERR "Trying to connect to $host:$port $family...\n";
            socket(Sock, $family, $socktype, $proto) || die "socket: $!";
            connect(Sock, $saddr) && last;
            close(Sock);
            $family = -1;
    }
    if( $family != -1 ){
            select(Sock);
            $|=1;
            select(STDOUT);
            print "connected to $host port $port\n";
            print Sock "test!\n";
            print <Sock>;
            close(Sock);
    }

で、
    print <Sock>
の部分を
    $len = read(Sock,$buf,6);
    print "len=$len\n";
    print "buf=$buf";
とかすれば動きますが、
    $len = read(Sock,$buf,7);
だとダメです。内部でバッファリングしちゃってるのかなぁ?

>>1668 rosegarden
> IPv6 見てから、IPv4 見ると言うのは、システムによっては
> 変わるのでしょうか?
/etc/hosts のエントリ順 (::1 と 127.0.0.1 のどちらが上にあるか) に
よって変わるようです。

No. 1670 # 68user 2001/01/26 (金) 17:53:10
ぐぅ、あほだ。
>>1669 68user
> print <Sock>
そりゃ動かんわな。$buf = <Sock>; print $buf か
print scalar(<Sock>) でした。失礼。

No. 1671 # 68user 2001/01/26 (金) 17:58:46
>>1667 rosegarden
> socket(Socket_Handle, $family, $socktype, $proto) || next;
> のミスじゃありませんか?
で、これどうしましょうかね。
    Hajimu UMEMOTO <ume@FreeBSD.org>
宛に投げればよきにはからってくれるでしょうけど、僕が連絡しても
いいですし、rosegarden さんが既に連絡済みであればそういうことで。

No. 1672 # rosegarden 2001/01/26 (金) 21:18:13
すみません、ちょっと横になっていました。
>>1671 68user
> Hajimu UMEMOTO <ume@FreeBSD.org>
> 宛に投げればよきにはからってくれるでしょうけど、
68user さんお願いできますか? ちょっと今はメール出せません。

それから ::1 と 217.0.0.1 について有難うございました。

No. 1673 # rosegarden 2001/01/26 (金) 22:05:56
>>1671 68user
サンプルのミスといえば、
>>1666 rosegarden
の C プログラムは man 3 getaddrinfo と man 3 getnameinfo
して表示されるサンプルをほとんど借用して書いたのですが、
man 3 getaddrinfo の方のサンプルも些細なところで typo
があります。
                      if (error) {
                                      err1(1, "%s", gai_strerror(error));
                                      /*NOTREACHED*/
                      }
err1 は err の typo ですね。
まぁ、こちらはリンクエラーになるので、はまることは絶対にないかと
思いますが。
# こちらも cvsup したソース見たのですが、直っていないですね。
# cvsup したのは昨日の晩ですが。

No. 1674 # ume [E-mail] 2001/01/26 (金) 22:28:30
I'll fix the typos around samples in getaddrinfo.3 and Socket6.pm.
Thanks!

No. 1675 # itojun 2001/01/27 (土) 00:50:28
be sure to report typos to either *BSD bug database, or KAME bug database.
otherwise they won't get fixed.

No. 1676 # rosegarden 2001/01/27 (土) 01:19:07
>>1674 ume
ume さん。お忙しいのにお手間かけてすみませんでした。
今後、気づいた点があれば、きちんと send-pr しますので、
>>1675 itojun
itojun さん。お忙しいのに、すみません。
これより www.kame.net に行って send-pr しますので、
今晩中にしますので、お時間ください。

それから、なにやら、ぶしつけな書き方で済みませんでした。

No. 1677 # rosegarden 2001/01/27 (土) 01:38:18
>>1675 itojun
>>1676 rosegarden
http://www.kame.net/dev/cvsweb.cgi/kame/kame/kame/libinet6/getaddrinfo.3
ああ、大変申し訳ございません。
以後、確認がとれ次第即時に send-pr 致します。

No. 1678 # 68user 2001/01/27 (土) 03:03:19
>>1672 rosegarden
ume さんにメール出しておきました、と書こうと思ったら
既に解決している…。

せっかくなので IPv6 ネタでも書きますか。その前にだいぶ
勉強が必要ですけれども。
    http://playground.iijlab.net/iij.news/
    http://www.running-dog.net/bsd/40/ipv6.html

No. 1679 # rosegarden 2001/01/27 (土) 18:52:05
>>1678 68user
> せっかくなので IPv6 ネタでも書きますか。その前にだいぶ
> 勉強が必要ですけれども。
是非ともお願いします。これを機会に私も IPv6 について勉強したいと
思っています。

No. 1680 # kikizo 2001/01/28 (日) 11:27:10
はじめまして。知人の会社の話なんですが、自社サーバ(NT)で
HPを公開しています。先日、日本語ドメインを多数取得し、
それらで今公開しているページにアクセスできるようにしたいそうです。
そこで、以下の質問なんですが...

1.複数のドメイン名で同じトップページにアクセスさせたい場合、
ネームサーバ登録時に同じIPを設定することでよいのでしょうか?

2.トップページ以の場合は(例えば、"www.***.com"と
"www.$$$.co.jp/***/***.htm"で同じページにアクセスさせたい場合)
どうすればよいのでしょうか?専門の業者に頼むべきでしょうか?

こちらの掲示板では、場違いな質問ですが、どなたか教えてください。
ここで聞いたほうがいいよ、という情報でもかまいません。
よろしくお願いします。

No. 1681 # 68user 2001/01/28 (日) 17:27:45
>>1680 kikizo
> 1.複数のドメイン名で...同じIPを設定することでよいのでしょうか?
そうです。

> 2.トップページ以の場合は...
バーチャルホストの設定次第でいかようにもできます。どんな
web サーバを使っているかは知りませんが、解説本を数冊買って
熟読すれば可能でしょう。時間と手間を惜しむなら業者に頼む
べきですね。

それはそれとして、一番気になるのは
> 日本語ドメインを多数取得し、それらで今公開しているページに
> アクセスできるようにしたい
これって現状で可能なんですか? 現在日本語ドメインのサービス
を行っている DNS は存在しないと認識しているのですが。
# http://www.onamae.com を見ても何も書いてないし。

あと、jpnic/apnic/internic で使用する文字コードが全然違う
という問題があるそうですが (詳しくは知らない)、ここらへん
どうなっているんでしょうね。

No. 1682 # kikizo 2001/01/29 (月) 12:34:52
>>1681 68user
68userさん、ありがとうございました。
おっしゃるとおり、日本語ドメインは、今は登録だけで使えませんよね。
いつから実際に運用されるのか全く未定だし、最悪何らかのトラブルで
登録したドメインが使えない可能性もあると、某登録代行業者のページに
書いてありました。
そんなわけで、時間はたっぷりありそうなので、ひとつ勉強してみます。

No. 1683 # mimishiro [E-mail] 2001/01/30 (火) 13:45:16
誰か知識のある方、教えてください!
幾つかのサーバーに2つのC言語プログラムを使う権限を与えて
共有ファイルを変更更新させるようなプログラムの例があれば
教えてください。それとそれと、その時サーバーにコンパイラを
持たせなくてもプログラムを動かすことはできるのですか?
何もかもわかりません。先輩方、どうかこんな低レベルな者に
ご指導くださいますよう、よろしくお願い申し上げます。(ミミシロ)

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