<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi Mark,</div><div class=""><br class=""></div><div class="">I’ve made the changes in GET-HOST-BY-NAME and GET-RANDOM-HOST-BY-NAME on usocket trunk (master) [1]. Now they only returns IPv4 addresses if the underlying hostname resolves to both IPv4 and IPv6 addresses.  I think this change is safe for all users.</div><div class=""><br class=""></div><div class="">I also exported these functions as I saw many users directly use them as exported symbols. This is reasonable too, as GET-RANDOM-HOST-BY-NAME actually gives the ability to do load balancing.</div><div class=""><br class=""></div><div class="">Any way, could you please confirm if the current code base works for you?</div><div class=""><br class=""></div><div class="">—Chun</div><div class=""><br class=""></div><div class="">[1] <a href="https://github.com/usocket/usocket" class="">https://github.com/usocket/usocket</a>, a1f32274686d3749ce491dd768c9d0da1a4479c4</div><br class=""><div><blockquote type="cite" class=""><div class="">Il giorno 05 lug 2018, alle ore 20:13, Mark H. David <<a href="mailto:mhd@yv.org" class="">mhd@yv.org</a>> ha scritto:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hi, that sounds very good to me. Thanks a lot. -Mark<br class=""><br class="">----- Original message -----<br class="">From: "Chun Tian (binghe)" <<a href="mailto:binghe.lisp@gmail.com" class="">binghe.lisp@gmail.com</a>><br class="">To: "Mark H. David" <<a href="mailto:mhd@yv.org" class="">mhd@yv.org</a>><br class="">Cc: usocket development <<a href="mailto:usocket-devel@common-lisp.net" class="">usocket-devel@common-lisp.net</a>><br class="">Subject: Re: bug in host-to-vector-quad on lispworks (also host-to-vector-quad)<br class="">Date: Thu, 5 Jul 2018 14:18:54 +0200<br class=""><br class="">Hi Mark,<br class=""><br class="">Now I see your points. So IPv4 addresses should have a higher priority over IPv6 when returned by USOCKET host resolving functions. I’m a little busy in this week, *next* week I’ll revise all related USOCKET functions and make the changes (also need a better way to detect IPv6 addresses in various forms). Hopefully at the end of July I can make a new release with cumulative updates in the past... more than one year.<br class=""><br class="">—Chun<br class=""><br class=""><blockquote type="cite" class="">Il giorno 04 lug 2018, alle ore 23:44, Mark H. David <<a href="mailto:mhd@yv.org" class="">mhd@yv.org</a>> ha scritto:<br class=""><br class="">Hi,<br class="">Kind of asking for a friend. I thought the thing to do would be to loop through the list and choose the first non-ipv6 result whereas now it simply chooses the first result.  For the random host case, it should similarly filter out ipv6 entries in the result.<br class="">Thank you very much!<br class="">-Mark<br class=""><br class="">----- Original message -----<br class="">From: "Chun Tian (binghe)" <<a href="mailto:binghe.lisp@gmail.com" class="">binghe.lisp@gmail.com</a>><br class="">To: "Mark H. David" <<a href="mailto:mhd@yv.org" class="">mhd@yv.org</a>><br class="">Cc: "usocket-devel" <<a href="mailto:usocket-devel@common-lisp.net" class="">usocket-devel@common-lisp.net</a>><br class="">Subject: Re: bug in host-to-vector-quad on lispworks (also host-to-vector-quad)<br class="">Date: Wed, 4 Jul 2018 22:47:04 +0200<br class=""><br class="">Hi Mark,<br class=""><br class="">thanks for reporting this issue.<br class=""><br class="">It’s obvious that #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1) means IPv6 address “::1”, which is indeed a valid address mapping to “localhost”. The function HOST-TO-HBO is not an exported function, it’s used internally by some backends and deals only with integers representing IPv4 addresses. But on LispWorks (>=6.1) the function lw-hbo-to-vector-quad may pass longer vectors back to HOST-TO-HBO and then caused this issue.<br class=""><br class="">On my Mac OS X laptop, I also got the same: (the first returned address is “::1”)<br class=""><br class="">CL-USER 5 > (comm:get-host-entry "localhost" :fields '(:addresses))<br class="">(#<COMM:IPV6-ADDRESS ::1 4020187E73> 2130706433)<br class=""><br class="">So what’s your desired behavior here?  In the quick fixes, I could do something to make get-random-host-by-name return a random IPv4 address in presence of mixed IPv4/v6 address lists. But generally speaking get-hosts-by-name should support IPv6 addresses, especially for those IPv6-only hostnames.<br class=""><br class="">On the other side, HOST-TO-HBO is not an exported function, and it’s also not called by LispWorks backends, I don’t understand how your call chain finally touched it and let LispWorks throw an exception.  It’s hard to support IPv6 in HOST-TO-HBO.<br class=""><br class="">Let me know what you think here, and with your help/inputs we can make usocket better.<br class=""><br class="">Regards,<br class=""><br class="">Chun<br class=""><br class=""><blockquote type="cite" class="">Il giorno 04 lug 2018, alle ore 21:04, Mark H. David <<a href="mailto:mhd@yv.org" class="">mhd@yv.org</a>> ha scritto:<br class=""><br class="">Running usocket-0.7.0.1 in LispWorks 7.1.0. In my system it happens currently that<br class=""><br class="">(get-hosts-by-name "localhost")<br class=""><br class="">returns the following list:<br class=""><br class="">(#(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1) #(127 0 0 1))<br class=""><br class="">Then get-host-by-name simply takes the first of that list and returns it.<br class=""><br class="">Host-to-hbo expects the result of get-host-by-name to always be a vector quad, so the result of calling it with "localhost" is an error on the recursive call with the result of (get-host-by-name "localhost") => #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1)<br class=""><br class="">The error message is due to falling out of the ecase:<br class=""><br class="">#(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1) fell through ETYPECASE expression inside USOCKET::HOST-TO-HBO.<br class=""><br class="">I observed that host-to-vector-quad gives the wrong result, a 16-byte instead of a 4-byte vector, due to the same root cause, but it will happen "randomly". The reason is it uses get-random-host-by-name, which chooses a random element of the same result list returned by (get-hosts-by-name "localhost").  For example, I just ran this in the REPL -- log:<br class=""><br class="">USOCKET> (loop repeat 10 for r = (host-to-vector-quad "localhost") when (not (= (length r) 4)) collect r)<br class="">(#(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1) #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1) #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1))<br class=""><br class="">This seems to be LispWorks only. I tried this on SBCL and CCL, but I could not recreate similar problems. Also, not all MacOS installs seem to get this weird ipv6 localhost the way I do. I'm not sure why I'm getting this. I do not remember doing anything special or any kind of stuff with ipv6, but apparently something I've done has "infected" me with it.  However, I can say I do not notice other networking issues on my system.<br class=""><br class="">Thanks,<br class="">Mark<br class=""><br class=""></blockquote><br class="">Email had 1 attachment:<br class="">+ signature.asc<br class=""> 1k (application/pgp-signature)<br class=""></blockquote><br class="">Email had 1 attachment:<br class="">+ signature.asc<br class="">  1k (application/pgp-signature)<br class=""></div></div></blockquote></div><br class=""></body></html>