rdt: do not panic

This commit is contained in:
rkonfj
2024-06-09 13:59:12 +08:00
parent 801db1ec78
commit 2f604928c3
2 changed files with 14 additions and 0 deletions

View File

@@ -54,6 +54,7 @@ func (fm *FileManager) Open(index int) (*os.File, error) {
}
func (fm *FileManager) HandleRequest(peerID string, conn net.Conn) {
defer conn.Close()
header := make([]byte, 4)
_, err := io.ReadFull(conn, header)
if err != nil || !bytes.Equal(header[:2], []byte{0, 0}) {

View File

@@ -253,6 +253,11 @@ func (c *rdtConn) buildFrame(cmd byte, no uint32, length uint16, data []byte) []
}
func (c *rdtConn) recv(pkt []byte) {
defer func() {
if err := recover(); err != nil {
slog.Debug("Recv", "recover", err)
}
}()
no := binary.BigEndian.Uint32(pkt[1:5])
l := binary.BigEndian.Uint16(pkt[5:7])
slog.Debug("RDTRecv", "cmd", pkt[0], "no", no, "peer", c.remoteAddr, "len", len(pkt))
@@ -348,6 +353,11 @@ func (c *rdtConn) sendNCK(no uint32) {
func (c *rdtConn) sendFIN() error {
exit := make(chan struct{})
go func() {
defer func() {
if err := recover(); err != nil {
slog.Debug("SendFIN", "recover", err)
}
}()
for range 5 {
select {
case <-exit:
@@ -533,6 +543,9 @@ func (l *RDTListener) recvPacket(pkt []byte, addr net.Addr) {
conn.recv(pkt)
return
}
if pkt[0] != 0 {
return
}
conn = l.newConn(addr)
conn.server = true
l.acceptConnMap[addr.String()] = conn