IPv6

[email protected] (Nicholas Bamber) Sat, 23 Apr 2011 17:06:15 +0100
Newsgroups perl.libwww
Organization Periapt Technologies
Message-ID <[email protected]>
Gisle,
	I have looked into this a  bit more. The facts are as far as I can see:

* The module names INET and INET6 relate directly to AF_INET and 
AF_INET6 constants in sys/socket.h (or at the very least a lot of code 
is thought to make this or related assumptions). This is why 
IO::Socket::INET will never support IPv6.

* IO::Socket::INET6 and IO::Socket::IP were written specifically to deal 
with this issue.

* People are actively working on getting IPv6 support at the 
IO::Socket::* level into perl core. It did not seem likely that it would 
get into perl 5.14 to me.

* I think I have spotted an issue directly in the Net::HTTP code. In 
Net::HTTP::Methods::http_configure the $peer variable is parsed into 
hostname/IP address and optional port by using the ':' seperator. This 
of course is going to break if the hostname is an IPv6 address.

On Debian (which now has a minimum perl version 5.10.1) we could 
probably cook a regular expression that would easily get us out of that 
hole. But I am not sure how widely applicable that would be.

Nicholas


On 13/03/11 12:27, Nicholas Bamber wrote:
> Gisle
> I have to apologize I have not really tried to study this code in detail
> so far. I have just been trying to understand the issues and the
> dependencies between the various modules.
>
>  >> I have not followed what the current state of this is. What prevents
> the
>  >>> core IO::Socket::INET from just working with IPv6?
>
> Whilst this seems the most logical cause of action, I have some evidence
> that it simply will not happen. I am still trying to get to the bottom
> of why this should be so, but here is a straw in the wind. The
> IO::Socket::SSL module (which is optionally used by Net::HTTPS) already
> uses IO::Socket::INET6 if it is available and IO::Socket::INET otherwise.
>
> Thus it seems to me the option which most sails with the wind is:
> 1.) Modify Net::HTTP to use IO::Socket::INET6 if it is available and
> IO::Socket::INET otherwise.
> 2.) Work with the author of IO::Socket::INET6 to improve its portability.
>
> As Michiel points out there are other options, but I think the analysis
> above (if it holds good) implicitly deals with that.
>
> As far as I can see the modules lacking a clear copyright statement are:
>
> File::Listing
> WWW:RobotRules
> Mozilla::CA
>
> Nicholas
>
>
> On 11/03/11 17:18, Michiel Beijen wrote:
>> Gisle,
>>
>> On Fri, Mar 11, 2011 at 3:06 PM, Nicholas
>> Bamber<[email protected]>wrote:
>>
>>>
>>>>
>>>> Seems wrong to me to start depending on the non-core IO::Socket::INET6.
>>>> Does that module even work on Windows?
>>>>
>>>> --Gisle
>>>>
>>>>
>>>
>>> I have not looked into this issue in detail either. Getting it fixed
>>> in IO::Socket::INET seems pretty logical to me and I will make
>>> enquiries in
>>> that area. I cannot help thinking that someone must have tried that
>>> before
>>> though.
>>>
>>
>> Please look at Paul Evans' IO::Socket::IP which can do both IPv4 and
>> IPv6 in
>> a transparent fashion. Ref:
>> http://leonerds-code.blogspot.com/2011/01/ipv6-in-perl.html
>>
>> I guess you're right in stating that preferably you should want to
>> depend on
>> a core module. It just might be that IO::Socket::IP should become a
>> part of
>> core in 5.14, then.
>>
>> --
>> Mike
>>
>
>