[#39325] File.fnmatch の改良について — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

はじめまして、山本です。

18 messages 2004/03/05

[#39429] trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

18 messages 2004/03/23
[#39454] Re: trial version of Ruby/Tk — "Shirai,Kaoru" <shirai@...> 2004/03/31

白井です。

[#39460] Re: trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...> 2004/04/01

永井@知能.九工大です.

[#39465] Re: trial version of Ruby/Tk — "Shirai,Kaoru" <shirai@...> 2004/04/01

白井です。

[#39466] Re: trial version of Ruby/Tk — Hidetoshi NAGAI <nagai@...> 2004/04/01

永井@知能.九工大です.

[#39453] Re: int/int in Ruby2? — Masaaki Sakano <mas@...>

坂野 正明です。

36 messages 2004/03/31
[#39455] Re: int/int in Ruby2? — NISHIMATSU Takeshi <t-nissie@...> 2004/03/31

西松と申します.

[#39470] Re: int/int in Ruby2? — Masaaki Sakano <mas@...> 2004/04/01

坂野 正明です。

[#39473] Re: int/int in Ruby2? — matz@... (Yukihiro Matsumoto) 2004/04/01

まつもと ゆきひろです

[#39484] Re: int/int in Ruby2? — Masaaki Sakano <mas@...> 2004/04/03

坂野 正明です。

[#39528] Re: int/int in Ruby2? — "T Akutsu" <locrian@...> 2004/04/09

あくつです。なんかわくわくしてきだぞ。(^^;)

[ruby-list:39450] Re: gethostbynameでホスト名が引けない

From: 堀川 久 <vzw00011@...>
Date: 2004-03-30 12:45:28 UTC
List: ruby-list #39450
こんにちは。

Yukihiro Matsumoto wrote on the <1080517196.131835.31289.nullmailer@picachu.netlab.jp>
>|getnameinfo()でエラーになっているようだったので、これを回避するように
>|しました。しかし、IPv4べったりになっています。どうするのが良いでしょう
>|か?
>
>いやあ、さすがにここでIPv6対応をあきらめるわけにはいかないで
>しょう。エラーの内容とか聞かせていただけませんか。

----

require "socket"

p TCPSocket.gethostbyname("www.yahoo.co.jp")      # この行でエラー
p TCPSocket.gethostbyname("61.196.224.8")

p Socket.gethostbyname("www.yahoo.co.jp")
p Socket.gethostbyname("61.196.224.8")

p Socket.gethostbyname("localhost")
p Socket.gethostbyname("127.0.0.1")
------

これを実行すると、単に、次のエラーが出ます。

gethost.rb:4:in `gethostbyname': host not found (SocketE
        from gethost.rb:4

FreeBSDの問題かどうか不明だったので、小さなコードを書いてみました(添
付ファイル)。

これはきちんと動作します。追っていませんが、socket.cのどこかに問題があ
るようです。

しかし、ここで気づいたのですが、RubyのSocket/TCPSocket.gethostbyname
は、IPv6対応できなくありませんか?

localhostに 127.0.0.1と::1が対応する場合、gethostbyname()の戻り値の形
式では表現できません。

このメソッドはIPv4決め打ちにしないといけないような気がしてきました。ど
うでしょうか。

-- 
HORIKAWA Hisashi (in Kanji: 堀川 久)
Netsphere Laboratories  http://www.nslabs.jp/

Attachments (1)

gethostipv6.c (1.69 KB, text/x-c++src)
#define _XOPEN_SOURCE 600

#ifdef __FreeBSD__
#include <sys/types.h>
#endif

#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void dump(const void* ptr, int len)
{
    const unsigned char* s = (unsigned char*) ptr;
    int i;
    for (i = 0; i < len; i++, s++) 
        printf("%02d ", *s);
}

void test(const char* nodename)
{
    struct addrinfo hints;
    struct addrinfo* res = NULL;
    char nodebuf[1000];
    int nodebuflen = sizeof(nodebuf);
    char servbuf[1000];
    int servbuflen = sizeof(servbuf);
    struct addrinfo* ai;
    int r;
    
    memset(&hints, 0, sizeof hints);
    hints.ai_flags = AI_CANONNAME;
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    r = getaddrinfo(nodename, NULL, &hints, &res);
    if (r != 0) {
        printf("error: %d\n", r);
        exit(1);
    }

    for (ai = res; ai; ai = ai->ai_next) {
        printf("flags, family, socktype, protocol = %d, %d, %d, %d\n",
               ai->ai_flags, ai->ai_family, ai->ai_socktype, ai->ai_protocol);
        printf("ai_addr = "); dump(ai->ai_addr, ai->ai_addrlen);
        printf("\nai_canonname = %s\n", ai->ai_canonname);

        r = getnameinfo(ai->ai_addr, ai->ai_addrlen,
                        nodebuf, nodebuflen, servbuf, servbuflen, NI_NUMERICHOST);
        if (r == 0) {
            printf("node = %s\n", nodebuf);
            printf("serv = %s\n", servbuf);
        }
    }

    freeaddrinfo(res);
    res = NULL;
}

int main()
{
    test("www.yahoo.co.jp");
    test("61.196.224.8");   // www24.secureserver.jp
    test("localhost");
    test("127.0.0.1");

    return 0;
}

In This Thread