Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add stub/wrapper for reuseport.Listen on Windows platforms #638

Merged
merged 16 commits into from Aug 30, 2019
Merged
2 changes: 2 additions & 0 deletions reuseport/reuseport_test.go
@@ -1,3 +1,5 @@
// +build !windows

package reuseport

import (
Expand Down
21 changes: 21 additions & 0 deletions reuseport/reuseport_windows.go
@@ -0,0 +1,21 @@
package reuseport

import (
"fmt"
"net"
)

// ErrNoReusePort is returned if the OS doesn't support SO_REUSEPORT.
type ErrNoReusePort struct {
andrewheberle marked this conversation as resolved.
Show resolved Hide resolved
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 always returns ErrNoReusePort on Windows
func Listen(network, addr string) (net.Listener, error) {
return nil, &ErrNoReusePort{fmt.Errorf("Not supported on Windows")}
}
16 changes: 16 additions & 0 deletions reuseport/reuseport_windows_test.go
@@ -0,0 +1,16 @@
package reuseport
andrewheberle marked this conversation as resolved.
Show resolved Hide resolved

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)
}
}