diff --git a/safesocket/safesocket_js.go b/safesocket/safesocket_js.go index 746fea511..0807885a8 100644 --- a/safesocket/safesocket_js.go +++ b/safesocket/safesocket_js.go @@ -5,15 +5,22 @@ package safesocket import ( "context" + "fmt" "net" + "sync/atomic" "github.com/akutz/memconn" ) const memName = "Tailscale-IPN" +// memSeq ensures each IPN instance in the same WASM process gets a distinct +// memconn address, so concurrent instances do not conflict on the registry. +var memSeq atomic.Int64 + func listen(path string) (net.Listener, error) { - return memconn.Listen("memu", memName) + name := fmt.Sprintf("%s-%d", memName, memSeq.Add(1)) + return memconn.Listen("memu", name) } func connect(ctx context.Context, _ string) (net.Conn, error) {