From: Jason A. Donenfeld Date: Sun, 25 Aug 2019 18:45:13 +0000 (-0600) Subject: device: getsockname on linux to determine port X-Git-Tag: 0.0.20190908~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8198c042810b2c512c610654272db845e32b75e;p=thirdparty%2Fwireguard-go.git device: getsockname on linux to determine port It turns out Go isn't passing the pointer properly so we wound up with a zero port every time. --- diff --git a/device/conn_linux.go b/device/conn_linux.go index ebbbe11..f74ad51 100644 --- a/device/conn_linux.go +++ b/device/conn_linux.go @@ -391,6 +391,11 @@ func create4(port uint16) (int, uint16, error) { return FD_ERR, 0, err } + sa, err := unix.Getsockname(fd) + if err == nil { + addr.Port = sa.(*unix.SockaddrInet4).Port + } + return fd, uint16(addr.Port), err } @@ -450,6 +455,11 @@ func create6(port uint16) (int, uint16, error) { return FD_ERR, 0, err } + sa, err := unix.Getsockname(fd) + if err == nil { + addr.Port = sa.(*unix.SockaddrInet6).Port + } + return fd, uint16(addr.Port), err }