mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-08 11:53:00 -04:00
be_sock: handle readv() returns ECONNREFUSED (freebsd 9.2)
During testing sometimes bufferevent/bufferevent_connect_fail_eventcb fails, and after some digging I found that this was the case when connect() doesn't return ECONNREFUSED immediately, and instead next operation will return it (in our case evbuffer_read()->readv(), needless to say that after this bufferevent_writecb() called and it checks error with getsockopt() but of course it doesn't return any error), so this patch checks "errno" after "readv()" and installs "bufev::connection_refused" flag, to handle this from writecb and only once. Fixes: bufferevent/bufferevent_connect_fail_eventcb Fixes: bufferevent/bufferevent_connect_fail_eventcb_defer Refs: #388
This commit is contained in:
parent
500b6b7577
commit
3189eb000b
@ -192,6 +192,10 @@ bufferevent_readcb(evutil_socket_t fd, short event, void *arg)
|
||||
int err = evutil_socket_geterror(fd);
|
||||
if (EVUTIL_ERR_RW_RETRIABLE(err))
|
||||
goto reschedule;
|
||||
if (EVUTIL_ERR_CONNECT_REFUSED(err)) {
|
||||
bufev_p->connection_refused = 1;
|
||||
goto done;
|
||||
}
|
||||
/* error case */
|
||||
what |= BEV_EVENT_ERROR;
|
||||
} else if (res == 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user