diff --git a/convert.go b/convert.go index 89ed671..d6069b3 100644 --- a/convert.go +++ b/convert.go @@ -154,6 +154,7 @@ func DialArgs(m ma.Multiaddr) (string, string, error) { if parts[2] == "udp" && len(parts) > 4 && parts[4] == "utp" { network = parts[4] } + var host string switch parts[0] { case "ip4": diff --git a/net.go b/net.go index 89a3ff6..316ea6a 100644 --- a/net.go +++ b/net.go @@ -226,14 +226,11 @@ func Listen(laddr ma.Multiaddr) (Listener, error) { switch lnet { case "utp": nl, err = utp.Listen(lnet, lnaddr) - if err != nil { - return nil, err - } - case "tcp": + default: nl, err = net.Listen(lnet, lnaddr) - if err != nil { - return nil, err - } + } + if err != nil { + return nil, err } return &maListener{ diff --git a/net_test.go b/net_test.go index 3cd7f4a..6aaa708 100644 --- a/net_test.go +++ b/net_test.go @@ -138,6 +138,36 @@ func TestListen(t *testing.T) { wg.Wait() } +func TestListenAddrs(t *testing.T) { + + test := func(addr string, succeed bool) { + + maddr := newMultiaddr(t, addr) + l, err := Listen(maddr) + if !succeed { + if err == nil { + t.Fatal("succeeded in listening", addr) + } + return + } + if succeed && err != nil { + t.Fatal("failed to listen", addr, err) + } + if l == nil { + t.Fatal("failed to listen", addr, succeed, err) + } + + if err = l.Close(); err != nil { + t.Fatal("failed to close listener", addr, err) + } + } + + test("/ip4/127.0.0.1/tcp/4324", true) + test("/ip4/127.0.0.1/udp/4325", false) + test("/ip4/127.0.0.1/udp/4326/udt", false) + test("/ip4/127.0.0.1/udp/4326/utp", true) +} + func TestListenAndDial(t *testing.T) { maddr := newMultiaddr(t, "/ip4/127.0.0.1/tcp/4323")