summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/google
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/google')
-rw-r--r--vendor/github.com/google/gops/agent/agent.go15
-rw-r--r--vendor/github.com/google/gops/agent/sockopt_unix.go36
-rw-r--r--vendor/github.com/google/gops/agent/sockopt_unsupported.go13
-rw-r--r--vendor/github.com/google/uuid/README.md2
-rw-r--r--vendor/github.com/google/uuid/marshal.go7
-rw-r--r--vendor/github.com/google/uuid/version1.go12
-rw-r--r--vendor/github.com/google/uuid/version4.go7
7 files changed, 79 insertions, 13 deletions
diff --git a/vendor/github.com/google/gops/agent/agent.go b/vendor/github.com/google/gops/agent/agent.go
index 59a03cf5..441814c9 100644
--- a/vendor/github.com/google/gops/agent/agent.go
+++ b/vendor/github.com/google/gops/agent/agent.go
@@ -8,6 +8,7 @@ package agent
import (
"bufio"
+ "context"
"encoding/binary"
"fmt"
"io"
@@ -55,6 +56,13 @@ type Options struct {
// can call Close before shutting down.
// Optional.
ShutdownCleanup bool
+
+ // ReuseSocketAddrAndPort determines whether the SO_REUSEADDR and
+ // SO_REUSEADDR socket options should be set on the listening socket of
+ // the agent. This option is only effective on unix-like OSes and if
+ // Addr is set to a fixed host:port.
+ // Optional.
+ ReuseSocketAddrAndPort bool
}
// Listen starts the gops agent on a host process. Once agent started, users
@@ -96,11 +104,14 @@ func Listen(opts Options) error {
if addr == "" {
addr = defaultAddr
}
- ln, err := net.Listen("tcp", addr)
+ var lc net.ListenConfig
+ if opts.ReuseSocketAddrAndPort {
+ lc.Control = setsockoptReuseAddrAndPort
+ }
+ listener, err = lc.Listen(context.Background(), "tcp", addr)
if err != nil {
return err
}
- listener = ln
port := listener.Addr().(*net.TCPAddr).Port
portfile = fmt.Sprintf("%s/%d", gopsdir, os.Getpid())
err = ioutil.WriteFile(portfile, []byte(strconv.Itoa(port)), os.ModePerm)
diff --git a/vendor/github.com/google/gops/agent/sockopt_unix.go b/vendor/github.com/google/gops/agent/sockopt_unix.go
new file mode 100644
index 00000000..7edaf209
--- /dev/null
+++ b/vendor/github.com/google/gops/agent/sockopt_unix.go
@@ -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
+}
diff --git a/vendor/github.com/google/gops/agent/sockopt_unsupported.go b/vendor/github.com/google/gops/agent/sockopt_unsupported.go
new file mode 100644
index 00000000..df3223bd
--- /dev/null
+++ b/vendor/github.com/google/gops/agent/sockopt_unsupported.go
@@ -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
+}
diff --git a/vendor/github.com/google/uuid/README.md b/vendor/github.com/google/uuid/README.md
index 9d92c11f..f765a46f 100644
--- a/vendor/github.com/google/uuid/README.md
+++ b/vendor/github.com/google/uuid/README.md
@@ -16,4 +16,4 @@ change is the ability to represent an invalid UUID (vs a NIL UUID).
Full `go doc` style documentation for the package can be viewed online without
installing this package by using the GoDoc site here:
-http://godoc.org/github.com/google/uuid
+http://pkg.go.dev/github.com/google/uuid
diff --git a/vendor/github.com/google/uuid/marshal.go b/vendor/github.com/google/uuid/marshal.go
index 7f9e0c6c..14bd3407 100644
--- a/vendor/github.com/google/uuid/marshal.go
+++ b/vendor/github.com/google/uuid/marshal.go
@@ -16,10 +16,11 @@ func (uuid UUID) MarshalText() ([]byte, error) {
// UnmarshalText implements encoding.TextUnmarshaler.
func (uuid *UUID) UnmarshalText(data []byte) error {
id, err := ParseBytes(data)
- if err == nil {
- *uuid = id
+ if err != nil {
+ return err
}
- return err
+ *uuid = id
+ return nil
}
// MarshalBinary implements encoding.BinaryMarshaler.
diff --git a/vendor/github.com/google/uuid/version1.go b/vendor/github.com/google/uuid/version1.go
index 199a1ac6..46310962 100644
--- a/vendor/github.com/google/uuid/version1.go
+++ b/vendor/github.com/google/uuid/version1.go
@@ -17,12 +17,6 @@ import (
//
// In most cases, New should be used.
func NewUUID() (UUID, error) {
- nodeMu.Lock()
- if nodeID == zeroID {
- setNodeInterface("")
- }
- nodeMu.Unlock()
-
var uuid UUID
now, seq, err := GetTime()
if err != nil {
@@ -38,7 +32,13 @@ func NewUUID() (UUID, error) {
binary.BigEndian.PutUint16(uuid[4:], timeMid)
binary.BigEndian.PutUint16(uuid[6:], timeHi)
binary.BigEndian.PutUint16(uuid[8:], seq)
+
+ nodeMu.Lock()
+ if nodeID == zeroID {
+ setNodeInterface("")
+ }
copy(uuid[10:], nodeID[:])
+ nodeMu.Unlock()
return uuid, nil
}
diff --git a/vendor/github.com/google/uuid/version4.go b/vendor/github.com/google/uuid/version4.go
index 84af91c9..c110465d 100644
--- a/vendor/github.com/google/uuid/version4.go
+++ b/vendor/github.com/google/uuid/version4.go
@@ -27,8 +27,13 @@ func New() UUID {
// equivalent to the odds of creating a few tens of trillions of UUIDs in a
// year and having one duplicate.
func NewRandom() (UUID, error) {
+ return NewRandomFromReader(rander)
+}
+
+// NewRandomFromReader returns a UUID based on bytes read from a given io.Reader.
+func NewRandomFromReader(r io.Reader) (UUID, error) {
var uuid UUID
- _, err := io.ReadFull(rander, uuid[:])
+ _, err := io.ReadFull(r, uuid[:])
if err != nil {
return Nil, err
}