summaryrefslogtreecommitdiff
path: root/bufferevent_sock.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-10-14 00:46:47 +0000
committerNick Mathewson <nickm@torproject.org>2009-10-14 00:46:47 +0000
commit25af6954411e369c41d452af5e6d95b9d5c73558 (patch)
treefff348406d5e1a5cdd7ceb37f32a4ffa73687c46 /bufferevent_sock.c
parentfc83ca3c7086fe1e1988722b95295c96d89a4152 (diff)
downloadlibevent-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.c18
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;
+ }
}
}