diff --git a/go.mod b/go.mod index efb39950..15b27b0b 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/libp2p/go-libp2p-crypto v0.0.1 github.com/libp2p/go-libp2p-loggables v0.0.1 github.com/libp2p/go-libp2p-metrics v0.0.1 - github.com/libp2p/go-libp2p-net v0.0.1 + github.com/libp2p/go-libp2p-net v0.0.2 github.com/libp2p/go-libp2p-peer v0.0.1 github.com/libp2p/go-libp2p-peerstore v0.0.1 github.com/libp2p/go-libp2p-protocol v0.0.1 diff --git a/go.sum b/go.sum index 3f8a4b47..2fae010f 100644 --- a/go.sum +++ b/go.sum @@ -80,6 +80,8 @@ github.com/libp2p/go-libp2p-metrics v0.0.1 h1:yumdPC/P2VzINdmcKZd0pciSUCpou+s0lw github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08= github.com/libp2p/go-libp2p-net v0.0.1 h1:xJ4Vh4yKF/XKb8fd1Ev0ebAGzVjMxXzrxG2kjtU+F5Q= github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= +github.com/libp2p/go-libp2p-net v0.0.2 h1:qP06u4TYXfl7uW/hzqPhlVVTSA2nw1B/bHBJaUnbh6M= +github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= github.com/libp2p/go-libp2p-peer v0.0.1 h1:0qwAOljzYewINrU+Kndoc+1jAL7vzY/oY2Go4DCGfyY= github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo= github.com/libp2p/go-libp2p-peerstore v0.0.1 h1:twKovq8YK5trLrd3nB7PD2Zu9JcyAIdm7Bz9yBWjhq8= diff --git a/swarm.go b/swarm.go index cc77e80e..1094e72e 100644 --- a/swarm.go +++ b/swarm.go @@ -295,6 +295,10 @@ func (s *Swarm) NewStream(ctx context.Context, p peer.ID) (inet.Stream, error) { for { c := s.bestConnToPeer(p) if c == nil { + if nodial, _ := inet.GetNoDial(ctx); nodial { + return nil, inet.ErrNoConn + } + if dials >= DialAttempts { return nil, errors.New("max dial attempts exceeded") } diff --git a/swarm_test.go b/swarm_test.go index 4911fc96..69eceb94 100644 --- a/swarm_test.go +++ b/swarm_test.go @@ -335,3 +335,13 @@ func TestFilterBounds(t *testing.T) { t.Log("got connect") } } + +func TestNoDial(t *testing.T) { + ctx := context.Background() + swarms := makeSwarms(ctx, t, 2) + + _, err := swarms[0].NewStream(inet.WithNoDial(ctx, "swarm test"), swarms[1].LocalPeer()) + if err != inet.ErrNoConn { + t.Fatal("should have failed with ErrNoConn") + } +}