mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 22:45:39 +00:00
Use a suitable response in tcp_connected() when initiating a read
When 'ISC_R_TIMEDOUT' is received in 'tcp_recv()', it times out the oldest response in the active responses queue, and only after that it checks whether other active responses have also timed out. So when setting a timeout value for a read operation after a successful connection, it makes sense to take the timeout value from the oldest response in the active queue too, because, theoretically, the responses can have different timeout values, e.g. when the TCP dispatch is shared. Currently 'resp' is always NULL. Previously when connect and read timeouts were not separated in dispatch this affected only logging, but now since we are setting a new timeout after a successful connection, we need to choose a suitable response from the active queue.
This commit is contained in:
committed by
Arаm Sаrgsyаn
parent
48471fd50c
commit
e61ba5865f
@@ -1871,18 +1871,17 @@ tcp_connected(isc_nmhandle_t *handle, isc_result_t eresult, void *arg) {
|
||||
}
|
||||
}
|
||||
|
||||
if (ISC_LIST_EMPTY(disp->active)) {
|
||||
/* Take the oldest active response. */
|
||||
resp = ISC_LIST_HEAD(disp->active);
|
||||
if (resp == NULL) {
|
||||
/* All responses have been canceled */
|
||||
disp->state = DNS_DISPATCHSTATE_CANCELED;
|
||||
} else if (eresult == ISC_R_SUCCESS) {
|
||||
disp->state = DNS_DISPATCHSTATE_CONNECTED;
|
||||
isc_nmhandle_attach(handle, &disp->handle);
|
||||
if (resp != NULL) {
|
||||
isc_nmhandle_cleartimeout(disp->handle);
|
||||
if (resp->timeout != 0) {
|
||||
isc_nmhandle_settimeout(disp->handle,
|
||||
resp->timeout);
|
||||
}
|
||||
isc_nmhandle_cleartimeout(disp->handle);
|
||||
if (resp->timeout != 0) {
|
||||
isc_nmhandle_settimeout(disp->handle, resp->timeout);
|
||||
}
|
||||
tcp_startrecv(disp, resp);
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user