diff options
author | Gabe Black <gabeblack@google.com> | 2017-10-28 00:36:13 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2017-10-30 22:15:45 +0000 |
commit | 44896ba35b0874b9925ebd7927e196d0eb639b5e (patch) | |
tree | 0b6ff0b54dc9cf2ff75ee7291e21908a3f0fb67b | |
parent | e79c4c6f033581f84072ddb45d2ec9543c31af55 (diff) | |
download | gem5-44896ba35b0874b9925ebd7927e196d0eb639b5e.tar.xz |
base: Fix forcing loopback only binding for listeners.
Despite online documentation, the type used for sin_addr.s_addr is not
actually an unsigned long, it is an in_addr_t. When an unsigned long is a 64
bit value, the endian conversion moves the relevant bits of the 32 bit
in_addr_t to positions which are truncated away. This forces the value to 0
which means to bind to any interface, the opposite of the intended effect.
Change-Id: I53c63dea6bd88144dfef1a9a49b478fab30a8ba2
Reviewed-on: https://gem5-review.googlesource.com/5301
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
-rw-r--r-- | src/base/socket.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/base/socket.cc b/src/base/socket.cc index 5ef0f4b9e..a09b51fb2 100644 --- a/src/base/socket.cc +++ b/src/base/socket.cc @@ -106,7 +106,7 @@ ListenSocket::listen(int port, bool reuse) struct sockaddr_in sockaddr; sockaddr.sin_family = PF_INET; sockaddr.sin_addr.s_addr = - htobe<unsigned long>(bindToLoopback ? INADDR_LOOPBACK : INADDR_ANY); + htobe<in_addr_t>(bindToLoopback ? INADDR_LOOPBACK : INADDR_ANY); sockaddr.sin_port = htons(port); // finally clear sin_zero memset(&sockaddr.sin_zero, 0, sizeof(sockaddr.sin_zero)); |