From: Amos Jeffries Date: Sat, 1 Jun 2024 19:33:23 +0000 (+0000) Subject: MinGW: Fix error: cannot convert 'size_t*' to 'int*' (#1825) X-Git-Tag: SQUID_7_0_1~113 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=096c1f937e50dad74c1e05581a68b04e41323302;p=thirdparty%2Fsquid.git MinGW: Fix error: cannot convert 'size_t*' to 'int*' (#1825) Removing another addrinfo as we do. --- diff --git a/src/comm/TcpAcceptor.cc b/src/comm/TcpAcceptor.cc index aa082df4b4..50ad7dedd8 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;