UDT: Remove unnecessary shutdownEvent waiting in udtSocket.Close. permitLinger only allowed for server, unless closed by client.

This commit is contained in:
Kleissner
2021-10-25 09:36:59 +02:00
parent 7afc61edef
commit e476c7e40b
2 changed files with 2 additions and 3 deletions

View File

@@ -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:

View File

@@ -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