]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Merge branch 'master' into stream-reuse
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Wed, 21 Oct 2020 07:54:03 +0000 (09:54 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Wed, 21 Oct 2020 07:54:03 +0000 (09:54 +0200)
Resolved comm_point_start_listening conflict for socket close.

1  2 
services/outside_network.c
testcode/fake_event.c
util/fptr_wlist.c
util/netevent.c
util/netevent.h

Simple merge
Simple merge
Simple merge
diff --cc util/netevent.c
index cf00c6ac87a99b9a9c45dec371f01d2445eee1ab,2428417fabc2133edb40a53ce97b07885fa9c422..b73c6459af631223367f43399408f9620e1afa83
@@@ -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);
diff --cc util/netevent.h
Simple merge