diff options
author | Nick Mathewson <nickm@torproject.org> | 2009-10-14 00:46:47 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2009-10-14 00:46:47 +0000 |
commit | 25af6954411e369c41d452af5e6d95b9d5c73558 (patch) | |
tree | fff348406d5e1a5cdd7ceb37f32a4ffa73687c46 /bufferevent_sock.c | |
parent | fc83ca3c7086fe1e1988722b95295c96d89a4152 (diff) | |
download | libevent-25af6954411e369c41d452af5e6d95b9d5c73558.tar.gz |
When a bufferevent_connect() call fails, give the client an error callback.
Patch from Christopher Davis.
svn:r1444
Diffstat (limited to 'bufferevent_sock.c')
-rw-r--r-- | bufferevent_sock.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/bufferevent_sock.c b/bufferevent_sock.c index f78fc094..b2d0175a 100644 --- a/bufferevent_sock.c +++ b/bufferevent_sock.c @@ -192,12 +192,24 @@ bufferevent_writecb(evutil_socket_t fd, short event, void *arg) goto error; } if (bufev_p->connecting) { + int c = evutil_socket_finished_connecting(fd); + + if (c == 0) + goto done; + bufev_p->connecting = 0; - connected = 1; - _bufferevent_run_eventcb(bufev, BEV_EVENT_CONNECTED); - if (!(bufev->enabled & EV_WRITE)) { + if (c < 0) { event_del(&bufev->ev_write); + event_del(&bufev->ev_read); + _bufferevent_run_eventcb(bufev, BEV_EVENT_ERROR); goto done; + } else { + connected = 1; + _bufferevent_run_eventcb(bufev, BEV_EVENT_CONNECTED); + if (!(bufev->enabled & EV_WRITE)) { + event_del(&bufev->ev_write); + goto done; + } } } |