From: W.C.A. Wijngaards Date: Wed, 21 Oct 2020 07:54:03 +0000 (+0200) Subject: Merge branch 'master' into stream-reuse X-Git-Tag: release-1.13.0rc1~5^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=78e9b8949c84fbd222f92deee5ea53ad6b4fbf48;p=thirdparty%2Funbound.git Merge branch 'master' into stream-reuse Resolved comm_point_start_listening conflict for socket close. --- 78e9b8949c84fbd222f92deee5ea53ad6b4fbf48 diff --cc util/netevent.c index cf00c6ac8,2428417fa..b73c6459a --- a/util/netevent.c +++ b/util/netevent.c @@@ -1819,18 -1790,14 +1882,18 @@@ comm_point_tcp_handle_write(int fd, str } if(WSAGetLastError() == WSAECONNRESET && verbosity < 2) return 0; /* silence reset by peer */ - log_err_addr("tcp send r", wsa_strerror(WSAGetLastError()), - &c->repinfo.addr, c->repinfo.addrlen); #endif + log_err_addr("tcp send r", sock_strerror(errno), + &c->repinfo.addr, c->repinfo.addrlen); return 0; } - sldns_buffer_skip(buffer, r); + if(c->tcp_write_and_read) { + c->tcp_write_byte_count += r; + } else { + sldns_buffer_skip(buffer, r); + } - if(sldns_buffer_remaining(buffer) == 0) { + if((!c->tcp_write_and_read && sldns_buffer_remaining(buffer) == 0) || (c->tcp_write_and_read && c->tcp_write_byte_count == c->tcp_write_pkt_len + 2)) { tcp_callback_writer(c); } @@@ -3373,25 -3807,13 +3954,21 @@@ comm_point_start_listening(struct comm_ } if(c->type == comm_tcp || c->type == comm_http) { ub_event_del_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); - if(c->tcp_is_reading) + if(c->tcp_write_and_read) { + verbose(5, "startlistening %d mode rw", (newfd==-1?c->fd:newfd)); + ub_event_add_bits(c->ev->ev, UB_EV_READ|UB_EV_WRITE); + } else if(c->tcp_is_reading) { + verbose(5, "startlistening %d mode r", (newfd==-1?c->fd:newfd)); ub_event_add_bits(c->ev->ev, UB_EV_READ); - else ub_event_add_bits(c->ev->ev, UB_EV_WRITE); + } else { + verbose(5, "startlistening %d mode w", (newfd==-1?c->fd:newfd)); + ub_event_add_bits(c->ev->ev, UB_EV_WRITE); + } } if(newfd != -1) { - if(c->fd != -1) { + if(c->fd != -1 && c->fd != newfd) { + verbose(5, "cpsl close of fd %d for %d", c->fd, newfd); - #ifndef USE_WINSOCK - close(c->fd); - #else - closesocket(c->fd); - #endif + sock_close(c->fd); } c->fd = newfd; ub_event_set_fd(c->ev->ev, c->fd);