Skip to content

x/mobile: Calling net.Listen fails on Android 11+ #68082

Open
@wlynxg

Description

@wlynxg

Go version

go version go1.20.11 darwin/arm64

Output of go env in your module/workspace:

GO111MODULE="on"
GOARCH="arm64"
GOBIN=""
GOCACHE="/Users/xxxx/Library/Caches/go-build"
GOENV="/Users/xxxx/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/xxxx/go/pkg/mod"
GONOPROXY="sum.golang.google.cn"
GONOSUMDB="sum.golang.google.cn"
GOOS="darwin"
GOPATH="/Users/xxxx/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64"
GOVCS=""
GOVERSION="go1.20.11"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/xxxx/Desktop/xxxx/gomobile/go.mod"
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/tl/pjq29cdd6s53760n3zjwwr3c0000gn/T/go-build3441012208=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

package mobile

import (
	"fmt"
	"log"
	"net"
	"net/netip"
	"syscall"

	"github.com/wlynxg/anet"
)

func Greetings(name string) string {
	anet.SetAndroidVersion(14)
	allifaces, err := anet.Interfaces()
	if err != nil {
		return fmt.Sprintf("Error: %s!", err)
	}
	s := ""

	for _, iface := range allifaces {
		s += iface.Name
		addrs, err := anet.InterfaceAddrsByInterface(&iface)
		if err != nil {
			s += fmt.Sprintf("Error: %s", err) + "\n"
		} else {
			s += fmt.Sprintf("%s \n", addrs)
		}

		for _, addr := range addrs {
			parseAddr, err := netip.ParsePrefix(addr.String())
			if err != nil {
				continue
			}

			if parseAddr.Addr().Is4() || parseAddr.Addr().IsMulticast() {
				continue
			}

			addr := fmt.Sprintf("[%s%%%s]:0", parseAddr.Addr().String(), iface.Name)

			_, err = net.Listen("tcp", addr)
			if err != nil {
				log.Printf("listen %s error: %s", addr, err)
			}
		}
	}
	return fmt.Sprintf("Hello, %s!", s)
}

What did you see happen?

listen [fe80::d461:24ff:fe95:d487%wlan0]:0 error: listen tcp [fe80::d461:24ff:fe95:d487%wlan0]:0: bind: invalid argument
listen [fe80::b6ee:d454:7f5b:6fe%rmnet_data1]:0 error: listen tcp [fe80::b6ee:d454:7f5b:6fe%rmnet_data1]:0: bind: invalid argument
listen [fe80::64bd:d9ff:fe5b:92a6%dummy0]:0 error: listen tcp [fe80::64bd:d9ff:fe5b:92a6%dummy0]:0: bind: invalid argument
listen [fe80::e0f1:31ff:fe88:8eb%ifb0]:0 error: listen tcp [fe80::e0f1:31ff:fe88:8eb%ifb0]:0: bind: invalid argument
listen [fe80::6cbb:96ff:fe13:ff68%ifb1]:0 error: listen tcp [fe80::6cbb:96ff:fe13:ff68%ifb1]:0: bind: invalid argument
listen [fe80::b0a1:c3ff:fe6d:c67%ifb2]:0 error: listen tcp [fe80::b0a1:c3ff:fe6d:c67%ifb2]:0: bind: invalid argument
listen [fe80::d41b:7750:b2d1:8fc6%rmnet_data0]:0 error: listen tcp [fe80::d41b:7750:b2d1:8fc6%rmnet_data0]:0: bind: invalid argument
listen [fe80::84bb:a6ff:cd2d:2ff1%rmnet_data3]:0 error: listen tcp [fe80::84bb:a6ff:cd2d:2ff1%rmnet_data3]:0: bind: invalid argument
listen [fe80::5bec:aaaf:e221:d681%rmnet_data4]:0 error: listen tcp [fe80::5bec:aaaf:e221:d681%rmnet_data4]:0: bind: invalid argument

What did you expect to see?

listen success

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.mobileAndroid, iOS, and x/mobile

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions