On Tue, 19 Sep 2023 21:40:18 GMT, Chris Plummer <cjplum...@openjdk.org> wrote:

> > Similar to @plummercj comment what about this code at L730:
> > ```
> > // Try to find bind address of preferred address family first.
> >     for (ai = addrInfo; ai != NULL; ai = ai->ai_next) {
> >         if (ai->ai_family == preferredAddressFamily) {
> >             listenAddr = ai;
> >             break;
> >         }
> >     }
> > ```
> > 
> > 
> >     
> >       
> >     
> > 
> >       
> >     
> > 
> >     
> >   
> > with AF_INET or AF_INET6 this would find a match, but with AF_UNSPEC then 
> > it seems it will just leave `ai` pointing to the last entry. ???
> 
> Wouldn't ai be NULL?

I think so, but does the value of `ai` when the loop exits matter? I don't see 
any reads of that value. There's another use of `ai` on L752, but it gets 
reinitialized first.

I could update this to something like the following, which I think will result 
in equivalent behavior but is possibly more readable, and avoids unnecessarily 
iterating over all the addresses:


    // Try to find bind address of preferred address family first.
    for (ai = addrInfo; ai != NULL; ai = ai->ai_next) {
-        if (ai->ai_family == preferredAddressFamily) {
+        if (ai->ai_family == preferredAddressFamily || preferredAddressFamily 
== AF_UNSPEC) {
            listenAddr = ai;
            break;
        }
    }

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15796#issuecomment-1726572673

Reply via email to