mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +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);
|
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);
|
async_connect_connected, req);
|
||||||
if (state->fde == NULL) {
|
if (state->fde == NULL) {
|
||||||
tevent_req_error(req, ENOMEM);
|
tevent_req_error(req, ENOMEM);
|
||||||
|
Loading…
Reference in New Issue
Block a user