mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
lib/async_req: make sure we return errors early from async_connect_send/recv
While it is true that [e]poll() only needs POLLOUT and POLLERR/POLLHUP are added implicitly. For tevent we need TEVENT_FD_READ in order to see POLLERR/POLLHUP. The socket becomes only readable when we hit an error. Waiting for TEVENT_FD_WRITE is needed for getting success, while TEVENT_FD_READ is required to get failures. This matches what we have in tstream_bsd_connect_send(). Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
parent
6d63fa0246
commit
048a4230b2
@ -147,7 +147,14 @@ struct tevent_req *async_connect_send(
|
||||
return tevent_req_post(req, ev);
|
||||
}
|
||||
|
||||
state->fde = tevent_add_fd(ev, state, fd, TEVENT_FD_WRITE,
|
||||
/*
|
||||
* Note for historic reasons TEVENT_FD_WRITE is not enough
|
||||
* to get notified for POLLERR or EPOLLHUP even if they
|
||||
* come together with POLLOUT. That means we need to
|
||||
* use TEVENT_FD_READ in addition until we have
|
||||
* TEVENT_FD_ERROR.
|
||||
*/
|
||||
state->fde = tevent_add_fd(ev, state, fd, TEVENT_FD_READ|TEVENT_FD_WRITE,
|
||||
async_connect_connected, req);
|
||||
if (state->fde == NULL) {
|
||||
tevent_req_error(req, ENOMEM);
|
||||
|
Loading…
Reference in New Issue
Block a user