【问题标题】:How to disable ruby UDPSocket from resolving IP address on recvfrom?如何禁用ruby UDPSocket解析recvfrom上的IP地址?
【发布时间】:2012-04-18 11:02:56
【问题描述】:

做数据时,addr = @socket.recvfrom(1500),addr数组包含Array: ["AF_INET", port, "resolved-name-or-ip", "ip"]

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

【问题讨论】:

    标签: ruby sockets ruby-1.8.7


    【解决方案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

    【讨论】:

    • 我的错,我忘了放 ruby​​ 版本 :(,我使用的是 ruby​​ 1.8.7
    【解决方案2】:

    好的。我找到了。

    我将在此处记录此内容,以便有人幸运地找到它。

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

    BasicSocket.do_not_reverse_lookup = true
    

    在创建套接字之前。它成功了。

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 2013-06-14
      • 2013-07-02
      • 2014-10-11
      • 2015-09-14
      相关资源
      最近更新 更多