VirtualBox

Changeset 51329 in vbox


Ignore:
Timestamp:
May 21, 2014 6:41:59 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
93812
Message:

NAT: Dump info for %R[natsock] even is socket is invalid or closed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/debug.c

    r44528 r51329  
    284284{
    285285    struct socket *so = (struct socket*)pvValue;
    286     struct sockaddr addr;
    287     struct sockaddr_in *in_addr;
    288     socklen_t socklen = sizeof(struct sockaddr);
    289286    PNATState pData = (PNATState)pvUser;
    290     int status = 0;
     287    size_t cb = 0;
     288
    291289    NOREF(cchWidth);
    292290    NOREF(cchPrecision);
     
    295293
    296294    AssertReturn(strcmp(pszType, "natsock") == 0, 0);
     295
    297296    if (so == NULL)
    298297        return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     
    302301                "socket(%d)", so->s);
    303302
    304     status = getsockname(so->s, &addr, &socklen);
    305     if(status != 0 || addr.sa_family != AF_INET)
    306     {
    307         return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
    308                 "socket(%d) is invalid(%s)", so->s, strerror(errno));
    309     }
    310 
    311     in_addr = (struct sockaddr_in *)&addr;
    312     return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "socket %d:(proto:%u) exp. in %d "
    313             "state=%R[natsockstate] "
    314             "fUnderPolling:%RTbool "
    315             "fShouldBeRemoved:%RTbool "
    316             "f_(addr:port)=%RTnaipv4:%d "
    317             "l_(addr:port)=%RTnaipv4:%d "
    318             "name=%RTnaipv4:%d",
     303    cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     304            "socket %d:(proto:%u) exp. in %d "
     305            " state=%R[natsockstate]"
     306            " fUnderPolling:%RTbool"
     307            " fShouldBeRemoved:%RTbool"
     308            " f_(addr:port)=%RTnaipv4:%d"
     309            " l_(addr:port)=%RTnaipv4:%d",
    319310            so->s, so->so_type,
    320311            so->so_expire ? so->so_expire - curtime : 0,
     
    325316            RT_N2H_U16(so->so_fport),
    326317            so->so_laddr.s_addr,
    327             RT_N2H_U16(so->so_lport),
    328             in_addr->sin_addr.s_addr,
    329             RT_N2H_U16(in_addr->sin_port));
     318            RT_N2H_U16(so->so_lport));
     319
     320    if (so->s != -1)
     321    {
     322        struct sockaddr addr;
     323        socklen_t socklen;
     324        int status;
     325
     326        socklen = sizeof(addr);
     327        status = getsockname(so->s, &addr, &socklen);
     328
     329        if (status != 0)
     330        {
     331            cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     332                    " (getsockname failed)");
     333        }
     334        else if (addr.sa_family != AF_INET)
     335        {
     336            cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     337                    " (unexpected address family %d)",
     338                    addr.sa_family);
     339        }
     340        else
     341        {
     342            struct sockaddr_in *in_addr = (struct sockaddr_in *)&addr;
     343            cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     344                    " name=%RTnaipv4:%d",
     345                    in_addr->sin_addr.s_addr,
     346                    RT_N2H_U16(in_addr->sin_port));
     347        }
     348    }
     349    return cb;
    330350}
    331351
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette