aboutsummaryrefslogtreecommitdiff
path: root/reuseport
diff options
context:
space:
mode:
authorGravatar andrewheberle <andrewheberle@users.noreply.github.com> 2019-08-30 18:22:25 +0800
committerGravatar Erik Dubbelboer <erik@dubbelboer.com> 2019-08-30 12:22:25 +0200
commit8ce231e840720d91e22f855ddba797b3b916fc75 (patch)
tree2f67b09e274b6c49604cc916f53be1e4620a6d2e /reuseport
parentAdd fuzzit support (#634) (diff)
downloadfasthttp-8ce231e840720d91e22f855ddba797b3b916fc75.tar.gz
fasthttp-8ce231e840720d91e22f855ddba797b3b916fc75.tar.bz2
fasthttp-8ce231e840720d91e22f855ddba797b3b916fc75.zip
Add stub/wrapper for reuseport.Listen on Windows platforms (#638)
* Create Windows stub for reuseport.Listen
Diffstat (limited to 'reuseport')
-rw-r--r--reuseport/reuseport.go13
-rw-r--r--reuseport/reuseport_error.go15
-rw-r--r--reuseport/reuseport_test.go2
-rw-r--r--reuseport/reuseport_windows.go11
-rw-r--r--reuseport/reuseport_windows_test.go18
5 files changed, 47 insertions, 12 deletions
diff --git a/reuseport/reuseport.go b/reuseport/reuseport.go
index 191fe64..85c7d65 100644
--- a/reuseport/reuseport.go
+++ b/reuseport/reuseport.go
@@ -1,4 +1,4 @@
-// +build linux darwin dragonfly freebsd netbsd openbsd rumprun
+// +build !windows
// Package reuseport provides TCP net.Listener with SO_REUSEPORT support.
//
@@ -9,23 +9,12 @@
package reuseport
import (
- "fmt"
"net"
"strings"
"github.com/valyala/tcplisten"
)
-// ErrNoReusePort is returned if the OS doesn't support SO_REUSEPORT.
-type ErrNoReusePort struct {
- err error
-}
-
-// Error implements error interface.
-func (e *ErrNoReusePort) Error() string {
- return fmt.Sprintf("The OS doesn't support SO_REUSEPORT: %s", e.err)
-}
-
// Listen returns TCP listener with SO_REUSEPORT option set.
//
// The returned listener tries enabling the following TCP options, which usually
diff --git a/reuseport/reuseport_error.go b/reuseport/reuseport_error.go
new file mode 100644
index 0000000..3e29d42
--- /dev/null
+++ b/reuseport/reuseport_error.go
@@ -0,0 +1,15 @@
+package reuseport
+
+import (
+ "fmt"
+)
+
+// ErrNoReusePort is returned if the OS doesn't support SO_REUSEPORT.
+type ErrNoReusePort struct {
+ err error
+}
+
+// Error implements error interface.
+func (e *ErrNoReusePort) Error() string {
+ return fmt.Sprintf("The OS doesn't support SO_REUSEPORT: %s", e.err)
+}
diff --git a/reuseport/reuseport_test.go b/reuseport/reuseport_test.go
index e781ff1..7763d3f 100644
--- a/reuseport/reuseport_test.go
+++ b/reuseport/reuseport_test.go
@@ -1,3 +1,5 @@
+// +build !windows
+
package reuseport
import (
diff --git a/reuseport/reuseport_windows.go b/reuseport/reuseport_windows.go
new file mode 100644
index 0000000..8137eb5
--- /dev/null
+++ b/reuseport/reuseport_windows.go
@@ -0,0 +1,11 @@
+package reuseport
+
+import (
+ "fmt"
+ "net"
+)
+
+// Listen always returns ErrNoReusePort on Windows
+func Listen(network, addr string) (net.Listener, error) {
+ return nil, &ErrNoReusePort{fmt.Errorf("Not supported on Windows")}
+}
diff --git a/reuseport/reuseport_windows_test.go b/reuseport/reuseport_windows_test.go
new file mode 100644
index 0000000..9345267
--- /dev/null
+++ b/reuseport/reuseport_windows_test.go
@@ -0,0 +1,18 @@
+// +build windows
+
+package reuseport
+
+import (
+ "testing"
+)
+
+func TestListen(t *testing.T) {
+ _, err := Listen("tcp6", "[::1]:10082")
+ if err == nil {
+ t.Fatalf("unexpected non-error creating listener")
+ }
+
+ if _, errnoreuseport := err.(*ErrNoReusePort); !errnoreuseport {
+ t.Fatalf("unexpected error creating listener: %s", err)
+ }
+}