forked from google/gops
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
agent: allow to set SO_REUSEPORT on listening socket
Introduce Option.SocketReuseAddrAndPort which, if set, will lead to the SO_REUSEPORT socket option being set on the listening socket on Unix-like OSes. This also sets SO_REUSEADDR which is already the default in net.Listen (see net.setDefaultSockopts). Setting these options increases the chance to re-bind() to the same address and port upon agent restart if Options.Addr is set. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
- Loading branch information
Showing
6 changed files
with
76 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// Copyright 2020 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
// +build !js,!plan9,!windows | ||
|
||
package agent | ||
|
||
import ( | ||
"syscall" | ||
|
||
"golang.org/x/sys/unix" | ||
) | ||
|
||
// setsockoptReuseAddrAndPort sets the SO_REUSEADDR and SO_REUSEPORT socket | ||
// options on c's underlying socket in order to increase the chance to re-bind() | ||
// to the same address and port upon agent restart. | ||
func setsockoptReuseAddrAndPort(network, address string, c syscall.RawConn) error { | ||
var soerr error | ||
if err := c.Control(func(su uintptr) { | ||
sock := int(su) | ||
// Allow reuse of recently-used addresses. This socket option is | ||
// set by default on listeners in Go's net package, see | ||
// net.setDefaultSockopts. | ||
soerr = unix.SetsockoptInt(sock, unix.SOL_SOCKET, unix.SO_REUSEADDR, 1) | ||
if soerr != nil { | ||
return | ||
} | ||
// Allow reuse of recently-used ports. This gives the agent a | ||
// better chance to re-bind upon restarts. | ||
soerr = unix.SetsockoptInt(sock, unix.SOL_SOCKET, unix.SO_REUSEPORT, 1) | ||
}); err != nil { | ||
return err | ||
} | ||
return soerr | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
// Copyright 2020 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
// +build js,wasm plan9 windows | ||
|
||
package agent | ||
|
||
import "syscall" | ||
|
||
func setsockoptReuseAddrAndPort(network, address string, c syscall.RawConn) error { | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters