<div dir="ltr"><div>Hi,<br><br>As requested I've provided the details of how this currently works and my proposal.<br><br></div>Any comments?<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 28, 2015 at 1:38 PM, Federico Schwindt <span dir="ltr"><<a href="mailto:fgsch@lodoss.net" target="_blank">fgsch@lodoss.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<br> <br>Current functionality<br>----------------------------<br> <br>1. If the string starts with "[" we take everything up to "]" as the host,<br>excluding the "[]".  If there is a ":" following the "]" we take                                                                                   <br>everything after it as the port.       <br>  <br>2. If the string has a space, take everything up to the space (but excluding<br>it) as the host.  Anything after the space is the port.            <br>  <br>3. If the string doesn't have a space, but has a ":" take everything up to<br>the ":" (but excluding it) as a host, and anything after as the port. <br>  <br>My proposal                            <br>-----------------                  <br>  <br>Change 3 as follows:                   <br>  <br>3. If the string doesn't have a space, but has a single ":" take   <br>everything up to the ":" (but excluding it) as a host, and anything<br>after as the port.  If the string has 2 or more ":", take the whole<br>string as a host without port.         <br>  <br>Examples                               <br>--------------                               <br>  <br>1.2.3.4       => host = 1.2.3.4     port =                           <br><a href="http://1.2.3.4:80" target="_blank">1.2.3.4:80</a>  => host = 1.2.3.4     port = 80                        <br>1.2.3.4 80  => host = 1.2.3.4     port = 80                        <br>foo.bar       => host = foobar      port =                           <br>foo.bar:80  => host = foobar      port = 80                        <br>foo.bar 80  => host = foobar      port = 80                        <br>[::1]             => host = ::1         port =                           <br>[::1]:80        => host = ::1         port = 80                        <br>::1               => host = ::1         port =                           <br>::1::2           => host = ::1::2      port =<br>1.2.3.4::80 => host = 1.2.3.4::80 port =<br><br>With the current implementation ::1 would fail. It works with my patch.<br>The last 2 would fail at getaddrinfo(), with or without my proposal.<span class="HOEnZb"><font color="#888888"><br> <br>f.-<br></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 28, 2015 at 8:58 AM, Poul-Henning Kamp <span dir="ltr"><<a href="mailto:phk@phk.freebsd.dk" target="_blank">phk@phk.freebsd.dk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">--------<br>
In message <CAJV_h0axHvroOtMPM83q=<a href="mailto:dCFHBtDL_XMzmGLu0q8mwWnCbSEZw@mail.gmail.com" target="_blank">dCFHBtDL_XMzmGLu0q8mwWnCbSEZw@mail.gmail.com</a>><br>
<span>, Federico Schwindt writes:<br>
<br>
>While moving from 4.0.x to 4.1 I noticed that std.ip(..., "::1") doesn't<br>
>work anymore.<br>
<br>
</span>I agree this is very far from optimal, but adding special-casing<br>
IPv6 address by IPv6 address is certainly *not* the way forward.<br>
<br>
The real question is, what does "::1:8080" mean ?<br>
<br>
Please propose the exact algorithm you prose for turning strings<br>
into IP numbers, and bear in mind that we need to be able to<br>
include port numbers.<br>
<span><font color="#888888"><br>
--<br>
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20<br>
phk@FreeBSD.ORG         | TCP/IP since RFC 956<br>
FreeBSD committer       | BSD since 4.3-tahoe<br>
Never attribute to malice what can adequately be explained by incompetence.<br>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div>