mirror of
https://github.com/sigcn/pg.git
synced 2025-10-25 22:10:20 +08:00
rdt: do not panic
This commit is contained in:
@@ -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}) {
|
||||
|
||||
13
rdt/rdt.go
13
rdt/rdt.go
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user