|
>>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; # 穴があったら入りたいです。 |
|
>>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 様ならびに皆様、再三のゴミ書き申し訳ありません。 |
|
>>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 のどちらが上にあるか) に よって変わるようです。 |
|
ぐぅ、あほだ。 >>1669 68user > print <Sock> そりゃ動かんわな。$buf = <Sock>; print $buf か print scalar(<Sock>) でした。失礼。 |
|
>>1667 rosegarden > socket(Socket_Handle, $family, $socktype, $proto) || next; > のミスじゃありませんか? で、これどうしましょうかね。 Hajimu UMEMOTO <ume@FreeBSD.org> 宛に投げればよきにはからってくれるでしょうけど、僕が連絡しても いいですし、rosegarden さんが既に連絡済みであればそういうことで。 |
|
すみません、ちょっと横になっていました。 >>1671 68user > Hajimu UMEMOTO <ume@FreeBSD.org> > 宛に投げればよきにはからってくれるでしょうけど、 68user さんお願いできますか? ちょっと今はメール出せません。 それから ::1 と 217.0.0.1 について有難うございました。 |
|
>>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 したのは昨日の晩ですが。 |
|
I'll fix the typos around samples in getaddrinfo.3 and Socket6.pm. Thanks! |
|
be sure to report typos to either *BSD bug database, or KAME bug database. otherwise they won't get fixed. |
|
>>1674 ume ume さん。お忙しいのにお手間かけてすみませんでした。 今後、気づいた点があれば、きちんと send-pr しますので、 >>1675 itojun itojun さん。お忙しいのに、すみません。 これより www.kame.net に行って send-pr しますので、 今晩中にしますので、お時間ください。 それから、なにやら、ぶしつけな書き方で済みませんでした。 |
|
>>1675 itojun >>1676 rosegarden http://www.kame.net/dev/cvsweb.cgi/kame/kame/kame/libinet6/getaddrinfo.3 ああ、大変申し訳ございません。 以後、確認がとれ次第即時に send-pr 致します。 |
|
>>1672 rosegarden ume さんにメール出しておきました、と書こうと思ったら 既に解決している…。 せっかくなので IPv6 ネタでも書きますか。その前にだいぶ 勉強が必要ですけれども。 http://playground.iijlab.net/iij.news/ http://www.running-dog.net/bsd/40/ipv6.html |
|
>>1678 68user > せっかくなので IPv6 ネタでも書きますか。その前にだいぶ > 勉強が必要ですけれども。 是非ともお願いします。これを機会に私も IPv6 について勉強したいと 思っています。 |
|
はじめまして。知人の会社の話なんですが、自社サーバ(NT)で HPを公開しています。先日、日本語ドメインを多数取得し、 それらで今公開しているページにアクセスできるようにしたいそうです。 そこで、以下の質問なんですが... 1.複数のドメイン名で同じトップページにアクセスさせたい場合、 ネームサーバ登録時に同じIPを設定することでよいのでしょうか? 2.トップページ以の場合は(例えば、"www.***.com"と "www.$$$.co.jp/***/***.htm"で同じページにアクセスさせたい場合) どうすればよいのでしょうか?専門の業者に頼むべきでしょうか? こちらの掲示板では、場違いな質問ですが、どなたか教えてください。 ここで聞いたほうがいいよ、という情報でもかまいません。 よろしくお願いします。 |
|
>>1680 kikizo > 1.複数のドメイン名で...同じIPを設定することでよいのでしょうか? そうです。 > 2.トップページ以の場合は... バーチャルホストの設定次第でいかようにもできます。どんな web サーバを使っているかは知りませんが、解説本を数冊買って 熟読すれば可能でしょう。時間と手間を惜しむなら業者に頼む べきですね。 それはそれとして、一番気になるのは > 日本語ドメインを多数取得し、それらで今公開しているページに > アクセスできるようにしたい これって現状で可能なんですか? 現在日本語ドメインのサービス を行っている DNS は存在しないと認識しているのですが。 # http://www.onamae.com を見ても何も書いてないし。 あと、jpnic/apnic/internic で使用する文字コードが全然違う という問題があるそうですが (詳しくは知らない)、ここらへん どうなっているんでしょうね。 |
|
>>1681 68user 68userさん、ありがとうございました。 おっしゃるとおり、日本語ドメインは、今は登録だけで使えませんよね。 いつから実際に運用されるのか全く未定だし、最悪何らかのトラブルで 登録したドメインが使えない可能性もあると、某登録代行業者のページに 書いてありました。 そんなわけで、時間はたっぷりありそうなので、ひとつ勉強してみます。 |
|
誰か知識のある方、教えてください! 幾つかのサーバーに2つのC言語プログラムを使う権限を与えて 共有ファイルを変更更新させるようなプログラムの例があれば 教えてください。それとそれと、その時サーバーにコンパイラを 持たせなくてもプログラムを動かすことはできるのですか? 何もかもわかりません。先輩方、どうかこんな低レベルな者に ご指導くださいますよう、よろしくお願い申し上げます。(ミミシロ) |