diff options
| author | xales <xales@naveria.com> | 2014-01-27 09:24:01 -0500 |
|---|---|---|
| committer | xales <xales@naveria.com> | 2014-01-27 20:59:15 -0500 |
| commit | e901c4caf30353f6adf12e6b10a46a4de517ec9d (patch) | |
| tree | 789f775806fcb9699a819e701b065290256693aa /src/libnative | |
| parent | b0280ac5385433bd663e825e24f6990a816a5f40 (diff) | |
| download | rust-e901c4caf30353f6adf12e6b10a46a4de517ec9d.tar.gz rust-e901c4caf30353f6adf12e6b10a46a4de517ec9d.zip | |
Set SO_REUSEADDR by default in libnative.
Fixes std::net test error when re-running too quickly.
Diffstat (limited to 'src/libnative')
| -rw-r--r-- | src/libnative/io/net.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libnative/io/net.rs b/src/libnative/io/net.rs index 9be4247b056..2f4bec22755 100644 --- a/src/libnative/io/net.rs +++ b/src/libnative/io/net.rs @@ -348,6 +348,17 @@ impl TcpListener { let (addr, len) = addr_to_sockaddr(addr); let addrp = &addr as *libc::sockaddr_storage; let ret = TcpListener { fd: fd }; + // On platforms with Berkeley-derived sockets, this allows + // to quickly rebind a socket, without needing to wait for + // the OS to clean up the previous one. + if cfg!(unix) { + match setsockopt(fd, libc::SOL_SOCKET, + libc::SO_REUSEADDR, + 1 as libc::c_int) { + Err(n) => { return Err(n); }, + Ok(..) => { } + } + } match libc::bind(fd, addrp as *libc::sockaddr, len as libc::socklen_t) { -1 => Err(super::last_error()), |
