From 0250a814c771be325a6e7f01bc60ded4be5c9bbf Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Sat, 1 Jun 2024 19:33:23 +0000 Subject: [PATCH] MinGW: Fix error: cannot convert 'size_t*' to 'int*' (#1825) Removing another addrinfo as we do. --- src/comm/TcpAcceptor.cc | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/comm/TcpAcceptor.cc b/src/comm/TcpAcceptor.cc index aa082df4b46..50ad7dedd8f 100644 --- a/src/comm/TcpAcceptor.cc +++ b/src/comm/TcpAcceptor.cc @@ -345,16 +345,13 @@ bool Comm::TcpAcceptor::acceptInto(Comm::ConnectionPointer &details) { ++statCounter.syscalls.sock.accepts; - struct addrinfo *gai = nullptr; - Ip::Address::InitAddr(gai); errcode = 0; // reset local errno copy. - const auto rawSock = accept(conn->fd, gai->ai_addr, &gai->ai_addrlen); + struct sockaddr_storage remoteAddress = {}; + socklen_t remoteAddressSize = sizeof(remoteAddress); + const auto rawSock = accept(conn->fd, reinterpret_cast(&remoteAddress), &remoteAddressSize); if (rawSock < 0) { errcode = errno; // store last accept errno locally. - - Ip::Address::FreeAddr(gai); - if (ignoreErrno(errcode) || errcode == ECONNABORTED) { debugs(50, 5, status() << ": " << xstrerr(errcode)); return false; @@ -373,21 +370,21 @@ Comm::TcpAcceptor::acceptInto(Comm::ConnectionPointer &details) details->fd = sock; details->enterOrphanage(); - details->remote = *gai; + Assure(remoteAddressSize <= socklen_t(sizeof(remoteAddress))); + details->remote = remoteAddress; // lookup the local-end details of this new connection - Ip::Address::InitAddr(gai); - details->local.setEmpty(); - if (getsockname(sock, gai->ai_addr, &gai->ai_addrlen) != 0) { + struct sockaddr_storage localAddress = {}; + socklen_t localAddressSize = sizeof(localAddress); + if (getsockname(sock, reinterpret_cast(&localAddress), &localAddressSize) != 0) { int xerrno = errno; - Ip::Address::FreeAddr(gai); debugs(50, DBG_IMPORTANT, "ERROR: Closing accepted TCP connection after failing to obtain its local IP address" << Debug::Extra << "accepted connection: " << details << Debug::Extra << "getsockname(2) error: " << xstrerr(xerrno)); return false; } - details->local = *gai; - Ip::Address::FreeAddr(gai); + Assure(localAddressSize <= socklen_t(sizeof(localAddress))); + details->local = localAddress; if (conn->flags & COMM_TRANSPARENT) { // the real client/dest IP address must be already available via getsockname() details->flags |= COMM_TRANSPARENT;