[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[Libevent-users] Re: evhttp client/server example with https, IPv6, etc (was: evhttp client error handling)



If you want to bind to ipv6 and ipv4 you could call
"evhttp_bind_socket_with_handle()" multiple times, it should work.
But by some reason you just couldn't bind to ipv6, you can try to use
exactly that version that I use -
https://launchpad.net/~azat/+archive/libevent-unofficial

What about examples, you can see at libevent tests.
And also want to note that there is
git://github.com/ellzey/libevhtp.git - replacement for libevent's
httpd API.

On Sun, Jan 27, 2013 at 1:43 AM, Patrick Pelletier
<ppelletier@xxxxxxxxxx> wrote:
> Azat Khuzhin wrote:
>
>> It looks like that you don't have ipv6 support, maybe kernel module
>> don't loaded.
>> Try to test like this
>> $ ls /proc/net/if_inet6
>
>
> No, I definitely have IPv6 support.  That is how this came up in the first
> place: "localhost" on my machine resolves to both "::1" and "127.0.0.1", and
> libevent tries "::1" first.
>
> What I don't have is a public IPv6 address.  But that shouldn't prevent IPv6
> from working on the loopback interface, or with link-local addresses on the
> other interfaces.
>
> Here is what is on my machine:
>
> ppelletier@chives:~$ uname -a
> Linux chives 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:39:17 UTC 2011
> x86_64 GNU/Linux
> ppelletier@chives:~$ ls /proc/net/if_inet6
> /proc/net/if_inet6
> ppelletier@chives:~$ cat /proc/net/if_inet6
> fe80000000000000025056fffec00008 04 40 20 80   vmnet8
> 00000000000000000000000000000001 01 80 10 80       lo
> fe80000000000000be305bfffeba2435 02 40 20 80     eth0
> fe80000000000000025056fffec00001 03 40 20 80   vmnet1
> ppelletier@chives:~$ ifconfig
> eth0      Link encap:Ethernet  HWaddr bc:30:5b:ba:24:35
>           inet addr:10.10.130.228  Bcast:10.10.255.255  Mask:255.255.0.0
>           inet6 addr: fe80::be30:5bff:feba:2435/64 Scope:Link
>           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>           RX packets:537594652 errors:0 dropped:2315362 overruns:0
> frame:765455
>           TX packets:77470702 errors:0 dropped:0 overruns:0 carrier:0
>           collisions:0 txqueuelen:1000
>           RX bytes:73560005284 (73.5 GB)  TX bytes:7637340989 (7.6 GB)
>           Interrupt:17
>
> lo        Link encap:Local Loopback
>           inet addr:127.0.0.1  Mask:255.0.0.0
>           inet6 addr: ::1/128 Scope:Host
>           UP LOOPBACK RUNNING  MTU:16436  Metric:1
>           RX packets:256626215 errors:0 dropped:0 overruns:0 frame:0
>           TX packets:256626215 errors:0 dropped:0 overruns:0 carrier:0
>           collisions:0 txqueuelen:0
>           RX bytes:194289637577 (194.2 GB)  TX bytes:194289637577 (194.2 GB)
>
> vmnet1    Link encap:Ethernet  HWaddr 00:50:56:c0:00:01
>           inet addr:192.168.81.1  Bcast:192.168.81.255  Mask:255.255.255.0
>           inet6 addr: fe80::250:56ff:fec0:1/64 Scope:Link
>           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>           RX packets:49353 errors:0 dropped:0 overruns:0 frame:0
>           TX packets:7856 errors:0 dropped:0 overruns:0 carrier:0
>           collisions:0 txqueuelen:1000
>           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
>
> vmnet8    Link encap:Ethernet  HWaddr 00:50:56:c0:00:08
>           inet addr:172.16.116.1  Bcast:172.16.116.255  Mask:255.255.255.0
>           inet6 addr: fe80::250:56ff:fec0:8/64 Scope:Link
>           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>           RX packets:47761 errors:0 dropped:0 overruns:0 frame:0
>           TX packets:4293 errors:0 dropped:0 overruns:0 carrier:0
>           collisions:0 txqueuelen:1000
>           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
>
> ppelletier@chives:~$
>
>> What about IPv6 and IPv4 at the same time
>> There is socket option: IPV6_V6ONLY (ipv6 (7)), default value is 1.
>>
>> But you can't set this option right using libevent, but you can set
>> default value for this option using using proc:
>> $ echo 0 | sudo tee -a /proc/sys/net/ipv6/bindv6only
>
>
> The fact that this can't be set in libevent seems like a flaw.  Asking the
> user to set the default value for the whole machine isn't an acceptable
> solution, because my goal here isn't to get the program working on my
> machine (there are any number of ways to do that), my goal is to have a
> program which can be deployed out into the world and work robustly on
> anybody's machine, regardless of exactly how their machine is configured.
>
> If I just cared about getting it working for me right here, right now, I
> would just use IPv4 only.  (And indeed that's what I'm doing right now; this
> whole thread is just an inquiry into what should I really be doing instead,
> if I wanted to do it right.)  I want to be a good citizen and write a
> program that works equally well with IPv4 or IPv6.  But, doing that seems to
> be quite tricky.
>
> What I'd like is an example program that shows the "best practices" for how
> to use evhttp, as both a client and server, with https, and with all of the
> tricky things like error handling and IPv4/IPv6 support that are normally
> left out of examples.  So what I'm thinking is that my https-example repo
> can serve as the basis for such an example, and once we get all these issues
> worked out, perhaps we can eventually contribute it back to the libevent
> repo, so that people in the future will have an easier time of doing this
> properly, without having to do as much experimentation as I have.
> (Currently, libevent only comes with an example for doing an http server.
> There is no http client example at all, and the server example doesn't cover
> https or IPv6.)
>
> Thanks,
>
> --Patrick



-- 
Azat Khuzhin
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.