diff --git a/udt/udtsocket.go b/udt/udtsocket.go index 2b580e1..9369f45 100644 --- a/udt/udtsocket.go +++ b/udt/udtsocket.go @@ -295,7 +295,6 @@ func (s *udtSocket) Close() error { } close(s.messageOut) - _, _ = <-s.shutdownEvent return nil } @@ -691,7 +690,7 @@ func (s *udtSocket) readPacket(m *multiplexer, p packet.Packet) { case *packet.HandshakePacket: // sent by both peers s.readHandshake(m, sp) case *packet.ShutdownPacket: // sent by either peer - s.shutdownEvent <- shutdownMessage{sockState: sockStateClosed, permitLinger: true} + s.shutdownEvent <- shutdownMessage{sockState: sockStateClosed, permitLinger: s.isServer} // if client tells us done, it is done. case *packet.AckPacket, *packet.LightAckPacket, *packet.NakPacket: // receiver -> sender s.sendEvent <- recvPktEvent{pkt: p, now: now} case *packet.UserDefControlPacket: diff --git a/udt/udtsocket_send.go b/udt/udtsocket_send.go index fceb87f..13dfec7 100644 --- a/udt/udtsocket_send.go +++ b/udt/udtsocket_send.go @@ -117,7 +117,7 @@ func (s *udtSocketSend) goSendEvent() { case msg, ok := <-thisMsgChan: // nil if we can't process outgoing messages right now if !ok { s.sendPacket <- &packet.ShutdownPacket{} - s.shutdownEvent <- shutdownMessage{sockState: sockStateClosed, permitLinger: true} + s.shutdownEvent <- shutdownMessage{sockState: sockStateClosed, permitLinger: !s.socket.isServer} return } s.msgPartialSend = &msg