データ、ADDR = @ socket.recvfrom(1500)を実行すると、ADDR配列は配列含まれています:どのようにすることができます[ "AF_INET"、ポート、 "解決名またはIP"、 "IP"]ruby UDPSocketがrecvfrom上のIPアドレスを解決できないようにするには?
をUDPSocketでの解決を無効にしますか? ruby UDPSocketのドキュメントは少し貧弱です。
データ、ADDR = @ socket.recvfrom(1500)を実行すると、ADDR配列は配列含まれています:どのようにすることができます[ "AF_INET"、ポート、 "解決名またはIP"、 "IP"]ruby UDPSocketがrecvfrom上のIPアドレスを解決できないようにするには?
をUDPSocketでの解決を無効にしますか? ruby UDPSocketのドキュメントは少し貧弱です。
[OK]をクリックします。見つけた。
誰かが幸運を得て見つけられるように、ここでこれを文書化します。
自動検索を無効にするには、あなたのコードでこれを置く:BasicSocket.do_not_reverse_lookup = true
をあなたはソケットを作成する前に。それはトリックです。
the documentationには、connect
メソッドでは、rsock_addrinfo
というメソッドが呼び出されます。
このメソッドは、getaddrinfo
を呼び出します。
私は回避策が表示されないので、別のconnectメソッドを呼び出す必要があります。
もっと理解を深めるために、いくつかのコードラインを追加できますか?私はあなたができないことを恐れている。
static VALUE
udp_connect(sock, host, port)
VALUE sock, host, port;
{
rb_io_t *fptr;
struct udp_arg arg;
VALUE ret;
rb_secure(3);
arg.res = sock_addrinfo(host, port, SOCK_DGRAM, 0);
GetOpenFile(sock, fptr);
arg.fd = fileno(fptr->f);
ret = rb_ensure(udp_connect_internal, (VALUE)&arg,
RUBY_METHOD_FUNC(freeaddrinfo), (VALUE)arg.res);
if (!ret) rb_sys_fail("connect(2)");
return INT2FIX(0);
}
出典:http://ruby-doc.org/stdlib-1.8.7/libdoc/socket/rdoc/UDPSocket.html
私の悪い、私はルビーバージョンを入れて忘れていた:(、私はルビー1.8.7を使用しています – cmouse