[Libevent-users] evhttp client and IPv6

2013-02-14 Thread Grega Kres
Hello,

I've written a simple program to get data off HTTP servers. The gist of it
is here: https://gist.github.com/gkres/4952640

It works as expected with ipv4, but I can't get it to work with ipv6. I
searched around a bit and I'm getting mixed answers about if this is
possible.

The libevent 2.0.21 source seems to suggest the socket is bound with
AF_INET but some people are claiming it can be done, but don't provide any
useful info beyond saying: "Libevent supports ipv6."

If this is in fact possible can someone help out with a working example?

Any help is appreciated.
Thanks


Re: [Libevent-users] evhttp client and IPv6

2013-02-14 Thread Alexey Ozeritsky
  14.02.2013, 17:17, "Grega Kres" :Hello,I've written a simple program to get data off HTTP servers. The gist of it is here: https://gist.github.com/gkres/4952640 It works as expected with ipv4, but I can't get it to work with ipv6. I searched around a bit and I'm getting mixed answers about if this is possible. The libevent 2.0.21 source seems to suggest the socket is bound with AF_INET but some people are claiming it can be done, but don't provide any useful info beyond saying: "Libevent supports ipv6." If this is in fact possible can someone help out with a working example?  libevent 2.0 does not support http client connection over ipv6. I use the attached hack in my own libevent version.  Any help is appreciated.Thanks

05-http-client-ipv6-hack.dpatch
Description: application/shellscript


Re: [Libevent-users] winsock error strings: evutil_socket_error_to_string versus FormatMessage

2013-02-14 Thread Nick Mathewson
On Thu, Feb 7, 2013 at 8:38 PM, Patrick Pelletier  wrote:
> I noticed the following comment in evutil_socket_error_to_string in
> evutil.c:
>
> /*  Is there really no built-in function to do this? */
>
> The answer is yes, the built-in function FormatMessage will do this for you.
> I'm happy to submit a patch that will change evutil_socket_error_to_string
> to call FormatMessage, if you like.  The only potential downside is that the
> messages evutil_socket_error_to_string currently returns are short and
> sweet, while the messages from FormatMessage are quite a bit longer.  Not
> sure if that's a disadvantage or not.

Hm.  I hadn't known that FormatMessage worked on winsock errors too.
Interesting!

Sure, I'll take a patch for 2.1.  We use the system error messages
elsewhere regardless of verbosity; might as well do that here too.

-- 
Nick
***
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-usersin the body.


Re: [Libevent-users] evhttp client and IPv6

2013-02-14 Thread Patrick Pelletier
I recently went through a similar experience of trying to get evhttp to 
work as a client with IPv6.  This evolved in the thread "evhttp client 
error handling".  Some of the most important posts in the thread are:


http://archives.seul.org/libevent/users/Nov-2012/msg00015.html
http://archives.seul.org/libevent/users/Jan-2013/msg00041.html
http://archives.seul.org/libevent/users/Jan-2013/msg00057.html

Azat Khuzhin submitted a patch which improved IPv6 support:

https://github.com/libevent/libevent/pull/39

However, this patch is only in libevent/master, which is going to be 
2.1, but it's too recent to be in the latest 2.1 tarball release, and 
it's definitely not in 2.0.  So you'll need to live on the bleeding edge 
to get it.


I've been similarly frustrated with the lack of evhttp client examples, 
especially ones that properly show how to do error handling, IPv6, and 
https.  I've created a repo (because it's just a little too big to feel 
comfortable as a gist) with my code in it:


https://github.com/ppelleti/https-example

I'd like to (with some help) get this example into shape where it shows 
the "best practices" for doing all these things, and then potentially 
contribute it back to libevent, to go in the "sample" directory, because 
currently the "sample" directory of the libevent repo only has an http 
server example, but not an http client example.  I've been told that the 
reason there are so few examples is because the tests also serve as 
examples, but personally I haven't found the tests all that satisfying 
as examples, either.  So, that's why I'd still like to contribute a 
client/server example (including https, IPv6, and error handling) for 
evhttp to the libevent "samples" directory.


Although Azat's patch is a good first step for IPv6 support in evhttp, I 
think some more work is still necessary.  In particular, 
bufferevent_connect_getaddrinfo_cb() in bufferevent_sock.c has the 
comment "XXX use the other addrinfos?".  I think we need to do this, in 
case a host has both an IPv4 address and an IPv6 address, but the server 
is only running on IPv4 or IPv6, but not both.  Currently, libevent will 
only try the first address and give up, but I think it needs to try the 
other one (e. g. IPv4) if the first one (e. g. IPv6) fails.  This is the 
problem I was running into, since "localhost" resolves to both "::1" and 
"127.0.0.1", and my server was only running on "127.0.0.1".  libevent 
tried "::1" first, saw no server was running there, and gave up, rather 
than moving on to "127.0.0.1" which would have succeeded.


The other thing people will tell you is to use libevhtp instead of 
evhttp.  If you don't need Windows support, you might want to look into 
that.  It's not an option for me, though, since I need a cross-platform 
solution, and libevhtp doesn't (yet) support Windows.


--Patrick


On 02/14/2013 05:17 AM, Grega Kres wrote:

Hello,

I've written a simple program to get data off HTTP servers. The gist of
it is here: https://gist.github.com/gkres/4952640

It works as expected with ipv4, but I can't get it to work with ipv6. I
searched around a bit and I'm getting mixed answers about if this is
possible.

The libevent 2.0.21 source seems to suggest the socket is bound with
AF_INET but some people are claiming it can be done, but don't provide
any useful info beyond saying: "Libevent supports ipv6."

If this is in fact possible can someone help out with a working example?

Any help is appreciated.
Thanks


***
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-usersin the body.