From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS47066 71.19.144.0/20 X-Spam-Status: No, score=-1.2 required=3.0 tests=AWL,BAYES_00,FREEMAIL_FROM, FROM_STARTS_WITH_NUMS,MSGID_FROM_MTA_HEADER shortcircuit=no autolearn=no version=3.3.2 Path: news.gmane.org!not-for-mail From: Hleb Valoshka <375gnu@gmail.com> Newsgroups: gmane.comp.lang.ruby.raindrops.general Subject: Re: [PATCH 2/2] Return real stats instead of True Date: Mon, 9 Sep 2013 23:35:16 +0300 Message-ID: References: <1378753439-13495-1-git-send-email-375GNU@Gmail.COM> <1378753439-13495-2-git-send-email-375GNU@Gmail.COM> <20130909192020.GA18010@dcvr.yhbt.net> <20130909194449.GA16692@dcvr.yhbt.net> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1378758919 22046 80.91.229.3 (9 Sep 2013 20:35:19 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 9 Sep 2013 20:35:19 +0000 (UTC) To: raindrops@librelist.org Original-X-From: raindrops@librelist.org Mon Sep 09 22:35:22 2013 Return-path: Envelope-to: gclrrg-raindrops@m.gmane.org List-Archive: List-Help: List-Id: List-Post: List-Subscribe: List-Unsubscribe: Precedence: list Original-Sender: raindrops@librelist.org Xref: news.gmane.org gmane.comp.lang.ruby.raindrops.general:127 Archived-At: Received: from zedshaw2.xen.prgmr.com ([71.19.156.177]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VJ8B6-00023I-7y for gclrrg-raindrops@m.gmane.org; Mon, 09 Sep 2013 22:35:20 +0200 Received: from zedshaw2.xen.prgmr.com (unknown [IPv6:::1]) by zedshaw2.xen.prgmr.com (Postfix) with ESMTP id 01F6874E67 for ; Mon, 9 Sep 2013 20:44:43 +0000 (UTC) On 9/9/13, Eric Wong wrote: >> But the real reason may be something else: I've got IPv6 address using >> Teredo and getnameinfo returns error with it. So it cause other >> errors, I need to check it better. > OK. Using some debug output I've found the reason (it's not a teredo, it was disabled). Lets look into linux_inet_diag.c, if tcp_listener_stats has only 1 arg, you do rb_hash_aset(rv, addrs, tcp_stats(&args, addrs)); (or cur = rb_ary_entry(addrs, 0); rb_hash_aset(rv, cur, tcp_stats(&args, cur)); ) return rv; But if it has more agrs, you do for (i = 0; i < len; i++) { union any_addr check; VALUE cur = rb_ary_entry(addrs, i); parse_addr(&check, cur); rb_hash_aset(rv, cur, Qtrue); and then fallback to branch where arg is nil, the most interesting thing is calling of st_AND_hash(key, stats, hash) which has if (rb_hash_lookup(hash, key) == Qtrue) { VALUE v = rb_listen_stats(stats); OBJ_FREEZE(key); rb_hash_aset(hash, key, v); } The problem is `key'. It may differ from what you expect. For example, in tests you do TEST_ADDR = ENV["TEST_HOST6"] || "::1" addr1, addr2 = "[#{TEST_ADDR}]:#{port1}", "[#{TEST_ADDR}]:#{port2}" In my last case they are [::1]:42244, [::1]:46335, but values of `key' for them are: [::1%3336]:42244, [::1%3336]:46335, so rb_hash_lookup never returns Qtrue.