diff --git a/examples/connect/connect.go b/examples/connect/connect.go index 831bd04..662bbad 100644 --- a/examples/connect/connect.go +++ b/examples/connect/connect.go @@ -4,6 +4,7 @@ import ( "bufio" "flag" "fmt" + "strings" "os" "os/signal" "syscall" @@ -63,7 +64,13 @@ func send(e *iroh.Endpoint, id string) { } func listen(e *iroh.Endpoint) { - incoming := *e.AcceptNext() + for { + incoming := *e.AcceptNext() + go handleIncoming(incoming) + } +} + +func handleIncoming (incoming *iroh.Incoming) { accepting, err := incoming.Accept() check(err) @@ -76,7 +83,17 @@ func listen(e *iroh.Endpoint) { recv := stream.Recv() for { frame, err := recv.Read(frameSize) - check(err) + // handle timeout + if err != nil { + irohErr := err.(*iroh.IrohError) + errMsg := irohErr.Message() + if strings.HasPrefix(errMsg, "ConnectionLost") { + fmt.Println("lost connection") + break + } else { + check(err) + } + } fmt.Println(string(frame)) } }