#define BEV_SUSPEND_WM 0x01
/* On a base bufferevent: when we have used up our bandwidth buckets. */
#define BEV_SUSPEND_BW 0x02
+/* On a socket bufferevent: we aren't going to try reading until the
+ * connect operation is done. */
+#define BEV_SUSPEND_CONNECTING 0x04
struct token_bucket {
uint32_t limit;
goto done;
} else {
connected = 1;
+ bufferevent_unsuspend_read(bufev, BEV_SUSPEND_CONNECTING);
#ifdef WIN32
if (BEV_IS_ASYNC(bufev)) {
event_del(&bufev->ev_write);
#endif
_bufferevent_run_eventcb(bufev,
BEV_EVENT_CONNECTED);
- if (!(bufev->enabled & EV_WRITE)) {
+ if (!(bufev->enabled & EV_WRITE) ||
+ bufev_p->write_suspended) {
event_del(&bufev->ev_write);
goto done;
}
/* do something about the error? */
done:
+ if (result == 0)
+ bufferevent_suspend_read(bev, BEV_SUSPEND_CONNECTING);
+
_bufferevent_decref_and_unlock(bev);
return result;
}
bufferevent_setcb(bev1, NULL, NULL, reader_eventcb, data->base);
bufferevent_setcb(bev2, NULL, NULL, reader_eventcb, data->base);
- tt_want(!bufferevent_socket_connect(bev1, sa, sizeof(localhost)));
- tt_want(!bufferevent_socket_connect(bev2, sa, sizeof(localhost)));
-
bufferevent_enable(bev1, EV_READ);
bufferevent_enable(bev2, EV_READ);
+ tt_want(!bufferevent_socket_connect(bev1, sa, sizeof(localhost)));
+ tt_want(!bufferevent_socket_connect(bev2, sa, sizeof(localhost)));
+
#ifdef WIN32
/* FIXME this is to get IOCP to work. it shouldn't be required. */
{