An experimental pub/sub client and server project.

better error logging

+15 -4
+15 -4
server/server.go
··· 5 5 "encoding/json" 6 6 "errors" 7 7 "fmt" 8 + "io" 8 9 "log/slog" 9 10 "net" 10 11 "strings" 11 12 "sync" 13 + "syscall" 12 14 "time" 13 15 14 16 "github.com/willdot/messagebroker/server/peer" ··· 97 99 98 100 action, err := readAction(peer, 0) 99 101 if err != nil { 100 - slog.Error("failed to read action from peer", "error", err, "peer", peer.Addr()) 102 + if !errors.Is(err, io.EOF) { 103 + slog.Error("failed to read action from peer", "error", err, "peer", peer.Addr()) 104 + } 101 105 return 102 106 } 103 107 ··· 128 132 time.Sleep(time.Second) 129 133 continue 130 134 } 131 - // TODO: see if there's a way to check if the peers connection has been ended etc 132 - slog.Error("failed to read action from subscriber", "error", err, "peer", peer.Addr()) 135 + 136 + if !errors.Is(err, io.EOF) { 137 + slog.Error("failed to read action from subscriber", "error", err, "peer", peer.Addr()) 138 + } 133 139 134 140 s.unsubscribePeerFromAllTopics(peer) 135 141 ··· 239 245 op := func(conn net.Conn) error { 240 246 dataLen, err := dataLength(conn) 241 247 if err != nil { 248 + if errors.Is(err, io.EOF) { 249 + return nil 250 + } 242 251 slog.Error("failed to read data length", "error", err, "peer", peer.Addr()) 243 252 writeStatus(Error, "invalid data length of data provided", conn) 244 253 return nil ··· 409 418 func writeStatus(status Status, message string, conn net.Conn) { 410 419 err := binary.Write(conn, binary.BigEndian, status) 411 420 if err != nil { 412 - slog.Error("failed to write status to peers connection", "error", err, "peer", conn.RemoteAddr()) 421 + if !errors.Is(err, syscall.EPIPE) { 422 + slog.Error("failed to write status to peers connection", "error", err, "peer", conn.RemoteAddr()) 423 + } 413 424 return 414 425 } 415 426