On 11/01/2012 09:13 PM, Patrick Pelletier wrote:
Anyway, the error stack does seem to be empty, because
"ERR_print_errors_fp (stderr);" does not print anything. So, that
means I should look at errno, which is ENOTCONN.
So, I figured out that I shouldn't be looking at the OpenSSL error
stack, because libevent squirrels it away to be retrieved by
bufferevent_get_openssl_error(). Although, in this case, it doesn't
matter, because that error stack is empty, too.
I'm guessing here that there was some sort of error establishing the
SSL connection, but we didn't notice or handle it, and forging ahead
after the connection failed is what earned us ENOTCONN.
Assuming this hypothesis is correct, any thoughts on at what point
libevent would have tried reporting that initial failure back to me,
and what I would need to do to be notified of it?
So, I figured out that the initial error that's occurring is
EAFNOSUPPORT. (Now, why that's happening is a separate mystery I need
to figure out... it happens when I use "localhost" as the hostname, but
not when I use "127.0.0.1".) However, the call to
evhttp_connection_reset_ in evhttp_connection_fail_ is overwriting errno
to be ENOTCONN, so that's the errno I see when my callback is called.
I'm thinking that evhttp_connection_fail_ should save and restore errno,
so that the callback can see what the original cause of the error is?
I'll probably submit a pull request for saving and restoring errno in
evhttp_connection_fail_. (I know I've been submitting a bunch of tiny,
one-or-two line pull requests to github lately. I don't know if that's
what I ought to be doing, or not.)
Although there's still something going on I don't get, because after my
callback returns, libevent still seems to forge ahead, and has some
fatal indigestion:
[warn] Epoll MOD(4) on fd 7 failed. Old events were 6; read change was
2 (del); write change was 0 (none): Bad file descriptor
[warn] Epoll MOD(1) on fd 7 failed. Old events were 6; read change was
0 (none); write change was 2 (del): Bad file descriptor
[err] http.c:688: Assertion req != NULL failed in evhttp_connection_fail_
Aborted
But I haven't yet worked out what's causing that, or how to prevent it.
Is there something my callback should do, to tell libevent "stop trying
to do stuff with this connection... it's dead?"
--Patrick
***********************************************************************
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-users in the body.