diff options
Diffstat (limited to 'lldb/tools/debugserver/source/RNBSocket.cpp')
-rw-r--r-- | lldb/tools/debugserver/source/RNBSocket.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/lldb/tools/debugserver/source/RNBSocket.cpp b/lldb/tools/debugserver/source/RNBSocket.cpp index 67dc0093dd9..448db2575a8 100644 --- a/lldb/tools/debugserver/source/RNBSocket.cpp +++ b/lldb/tools/debugserver/source/RNBSocket.cpp @@ -120,20 +120,6 @@ RNBSocket::Listen (const char *listen_host, in_port_t port, PortBoundCallback ca return rnb_err; } - if (callback && port == 0) - { - // We were asked to listen on port zero which means we - // must now read the actual port that was given to us - // as port zero is a special code for "find an open port - // for me". - socklen_t sa_len = sizeof (sa); - if (getsockname(listen_fd, (struct sockaddr *)&sa, &sa_len) == 0) - { - port = ntohs (sa.sin_port); - callback (callback_baton, port); - } - } - error = ::listen (listen_fd, 5); if (error == -1) err.SetError(errno, DNBError::POSIX); @@ -146,6 +132,27 @@ RNBSocket::Listen (const char *listen_host, in_port_t port, PortBoundCallback ca ClosePort (listen_fd, false); return rnb_err; } + + if (callback) + { + // We were asked to listen on port zero which means we + // must now read the actual port that was given to us + // as port zero is a special code for "find an open port + // for me". + if (port == 0) + { + socklen_t sa_len = sizeof (sa); + if (getsockname(listen_fd, (struct sockaddr *)&sa, &sa_len) == 0) + { + port = ntohs (sa.sin_port); + callback (callback_baton, port); + } + } + else + { + callback (callback_baton, port); + } + } struct sockaddr_in accept_addr; ::memset (&accept_addr, 0, sizeof accept_addr); |