On Tue, Sep 16, 2014 at 12:42:30AM -0500, Abel Abraham Camarillo Ojeda wrote: > On Mon, Sep 15, 2014 at 3:32 PM, Remi Locherer <[email protected]> wrote: > > On Wed, Sep 10, 2014 at 06:34:48PM +0200, Remi Locherer wrote: > >> Hi > >> > >> The following diff brings Mojolicious to version 5.39. In addition I > >> removed the maintainer (not active for this port since couple of years). > >> > >> There is one issue with the user_agent_online tests (activated by env > >> TEST_ONLINE). 6 test (3 scenarios) fail. These test the URLs: > >> http://localhost:random_port > >> http://127.0.0.1:random_port > >> http://[::1]:random_port > >> > >> This problem can be reproduced with the mojo command: > >> remi@mistral:~% mojo get http://127.0.0.1:55743 > >> Mojo::Reactor::EV: Write failed: Can't call method "on" on an undefined > >> value at /usr/local/libdata/perl5/site_perl/Mojo/UserAgent.pm line 124. > >> > >> There was allready a (different) failure with Mojolicious 4.66 on OpenBSD > >> 5.5: > >> remi@typhoon$ mojo get http://localhost:44568 > >> Mojo::Reactor::EV: Write failed: Mojo::UserAgent: Event "connect" failed: > >> addr is not a string at /usr/local/libdata/perl5/site_perl/IO/Socket/IP.pm > >> line 678. > >> Problem loading URL "http://localhost:44568". (Premature connection close) > >> > >> I tried the same on a Linux CentOS5 box I have access to with Perl 5.18.1 > >> and Mojolicious 5.39 and got the expected result: > >> rlochere@tux-05$ mojo get http://localhost:34589 > >> Problem loading URL "http://localhost:34589". (Connection refused) > >> > >> URLs different from localhost work as expected. > >> > >> Can somebody with more OpenBSD specific Perl knowledge help? > > > > I looked a bit more into this issue. Mojo is using IO::Socket::INET by > > default. If it finds IO::Socket::IP it uses this instead (see > > Mojo::IOLoop::Client). This enables IPv6 within Mojolicious. With an > > env var mojo can be forced to use IO::Socket::INET. > > > > --> With IO::Socket::IP > > remi@mistral:~% mojo get 127.0.0.1:12345 > > Mojo::Reactor::EV: Write failed: Can't call method "on" on an undefined > > value at /usr/local/libdata/perl5/site_perl/Mojo/UserAgent.pm line 122. > > > > --> With IO::Socket::INET > > remi@mistral:~% MOJO_NO_IPV6=1 mojo get 127.0.0.1:12345 > > Problem loading URL "127.0.0.1:12345". (Can't connect: IO::Socket::INET: > > connect: Connection refused) > > > > Running the two scripts below shows the different behaviour between the > > two modules. In both cases I could observe with tcpdump that a tcp syn > > was sent and a tcp rst returned. > > > > remi@mistral:~% cat sock-ip.pl > > #!/usr/bin/perl -w > > use IO::Socket::IP; > > my $sock = IO::Socket::IP->new( > > PeerAddr => "127.0.0.1", PeerPort => "8090", Blocking => 0 > > ) or die $@; > > remi@mistral:~% ./sock-ip.pl > > remi@mistral:~% echo $? > > 0 > > remi@mistral:~% cat sock-inet.pl > > #!/usr/bin/perl > > use IO::Socket::INET; > > my $sock = IO::Socket::INET->new( > > PeerAddr => "127.0.0.1", PeerPort => "8090", Blocking => 0 > > ) or die $@; > > remi@mistral:~% ./sock-inet.pl > > IO::Socket::INET: connect: Connection refused at ./sock-inet.pl line 4. > > remi@mistral:~% echo $? > > 61 > > > > Why this difference? I could not see this on a Linux box I have access. > > > > Can you provide details about your linux box? I'd like to reproduce > your working scenario, specially I'd like to see if I can get the _same_ > version of the perl modules (IO::Socket::IP, IO::Socket::INET, > Socket.pm, IO::Socket.pm) > to work on both openbsd and linux and see if there's any difference...
I used perlbrew for perl and cpan for the modules. But I'd rather understand why IO::Socket::IP on OpenBSD reacts differently to a TCP RST when sent from localhost compared to a remote box. > > It seams to me that the cause is not in p5-Mojolicious and an update of > > the port has not to wait for this beeing fixed. > > I'd love to see this port updated, but I'm ok if commiters don't want > to push it because of these issues... > > Thank you. > > > Remi > > >
