From 25af6954411e369c41d452af5e6d95b9d5c73558 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 14 Oct 2009 00:46:47 +0000 Subject: When a bufferevent_connect() call fails, give the client an error callback. Patch from Christopher Davis. svn:r1444 --- bufferevent_sock.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'bufferevent_sock.c') 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; + } } } -- cgit v1.2.1