68user's page 掲示板

Prev< No. 1669〜1674> Next  [最新発言に戻る] [過去ログ一覧]
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!

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