如何禁用ruby UDPSocket解析recvfrom上的IP地址?

时间:2012-04-18 11:02:56

标签: ruby sockets ruby-1.8.7

在执行数据时,addr = @socket.recvfrom(1500),addr数组包含Array:[“AF_INET”,port,“resolved-name-or-ip”,“ip”]

如何在UDPSocket上禁用解析? ruby UDPSocket的文档有点差。

2 个答案:

答案 0 :(得分:1)

the documentation中,您可以在connect方法中看到调用的rsock_addrinfo方法。

此方法调用getaddrinfo

所以我没有看到解决方法,你必须调用另一种连接方法。

也许您可以添加一些代码行以便更好地理解?我担心你不能。

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 :(得分:0)

确定。我找到了。

我会在这里记录下来,这样有人可能会很幸运并找到它。

要禁用自动查找,请将其放在代码中:

BasicSocket.do_not_reverse_lookup = true
在创建套接字之前

。它成功了。