From c64dabc3ba65a2a83ce84abcf039dc5779e04de6 Mon Sep 17 00:00:00 2001 From: Houmgaor Date: Tue, 17 Feb 2026 23:57:14 +0100 Subject: [PATCH] fix: check all Close() return values for errcheck lint Add explicit error discards (_ =) for Close() calls on network connections, SQL rows, and file handles across 28 files. Also add .golangci.yml with standard linter defaults to match CI configuration. --- .golangci.yml | 7 +++++++ common/token/token_test.go | 5 +++-- config/config.go | 2 +- server/api/api_server_test.go | 2 +- server/api/endpoints.go | 4 ++-- server/channelserver/handlers.go | 6 +++--- server/channelserver/handlers_character.go | 2 +- server/channelserver/handlers_data.go | 4 ++-- server/channelserver/handlers_diva.go | 2 +- server/channelserver/handlers_event.go | 2 +- server/channelserver/handlers_festa.go | 8 ++++---- server/channelserver/handlers_guild.go | 6 +++--- server/channelserver/handlers_guild_alliance.go | 2 +- server/channelserver/handlers_guild_member.go | 4 ++-- server/channelserver/handlers_guild_scout.go | 2 +- server/channelserver/handlers_guild_tresure.go | 2 +- server/channelserver/handlers_house.go | 2 +- server/channelserver/handlers_mail.go | 2 +- server/channelserver/handlers_mercenary.go | 2 +- server/channelserver/handlers_quest.go | 2 +- server/channelserver/handlers_rengoku.go | 2 +- server/channelserver/handlers_tower.go | 2 +- server/channelserver/sys_channel_server.go | 6 +++--- server/channelserver/testhelpers_db.go | 4 ++-- server/entranceserver/entrance_server.go | 4 ++-- server/entranceserver/entrance_server_test.go | 6 +++--- server/signserver/session_test.go | 10 +++++----- server/signserver/sign_server.go | 4 ++-- server/signserver/sign_server_test.go | 8 ++++---- 29 files changed, 61 insertions(+), 53 deletions(-) create mode 100644 .golangci.yml diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 000000000..964191039 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,7 @@ +version: "2" + +run: + timeout: 5m + +linters: + default: standard diff --git a/common/token/token_test.go b/common/token/token_test.go index 602bccb15..463f4b9a2 100644 --- a/common/token/token_test.go +++ b/common/token/token_test.go @@ -334,6 +334,7 @@ func TestGenerate_ConsistentCharacterSet(t *testing.T) { func TestRNG_Type(t *testing.T) { // Verify RNG is of type *SafeRand - var _ *SafeRand = RNG - var _ *SafeRand = NewSafeRand() + var _ = (*SafeRand)(nil) + _ = RNG + _ = NewSafeRand() } diff --git a/config/config.go b/config/config.go index 9685954e4..e30cbcd12 100644 --- a/config/config.go +++ b/config/config.go @@ -337,7 +337,7 @@ func getOutboundIP4() net.IP { if err != nil { log.Fatal(err) } - defer conn.Close() + defer func() { _ = conn.Close() }() localAddr := conn.LocalAddr().(*net.UDPAddr) diff --git a/server/api/api_server_test.go b/server/api/api_server_test.go index 758534eec..66ce3dfbc 100644 --- a/server/api/api_server_test.go +++ b/server/api/api_server_test.go @@ -124,7 +124,7 @@ func TestAPIServerStart(t *testing.T) { // This might fail if the server didn't start properly or port is blocked t.Logf("Failed to connect to server: %v", err) } else { - defer resp.Body.Close() + defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusNotFound { t.Logf("Unexpected status code: %d", resp.StatusCode) } diff --git a/server/api/endpoints.go b/server/api/endpoints.go index 71b78277d..ebfc7a2cc 100644 --- a/server/api/endpoints.go +++ b/server/api/endpoints.go @@ -319,7 +319,7 @@ func (s *APIServer) ScreenShotGet(w http.ResponseWriter, r *http.Request) { http.Error(w, "Image not found", http.StatusNotFound) return } - defer file.Close() + defer func() { _ = file.Close() }() // Set content type header to image/jpeg w.Header().Set("Content-Type", "image/jpeg") // Copy the image content to the response writer @@ -390,7 +390,7 @@ func (s *APIServer) ScreenShot(w http.ResponseWriter, r *http.Request) { if err != nil { result = Result{Code: "500"} } - defer outputFile.Close() + defer func() { _ = outputFile.Close() }() // Encode the image and write it to the file err = jpeg.Encode(outputFile, img, &jpeg.Options{Quality: s.erupeConfig.Screenshots.UploadQuality}) diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 45d0d2ecb..f17818bfa 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -132,7 +132,7 @@ func handleMsgSysLogin(s *Session, p mhfpacket.MHFPacket) { var token string err := s.server.db.QueryRow("SELECT token FROM sign_sessions ss INNER JOIN public.users u on ss.user_id = u.id WHERE token=$1 AND ss.id=$2 AND u.id=(SELECT c.user_id FROM characters c WHERE c.id=$3)", pkt.LoginTokenString, pkt.LoginTokenNumber, pkt.CharID0).Scan(&token) if err != nil { - s.rawConn.Close() + _ = s.rawConn.Close() s.logger.Warn(fmt.Sprintf("Invalid login token, offending CID: (%d)", pkt.CharID0)) return } @@ -342,7 +342,7 @@ func logoutPlayer(s *Session) { // NOW do cleanup (after save is complete) s.server.Lock() delete(s.server.sessions, s.rawConn) - s.rawConn.Close() + _ = s.rawConn.Close() s.server.Unlock() // Stage cleanup @@ -1126,7 +1126,7 @@ func handleMsgMhfInfoScenarioCounter(s *Session, p mhfpacket.MHFPacket) { var scenario Scenario scenarioData, err := s.server.db.Queryx("SELECT scenario_id, category_id FROM scenario_counter") if err != nil { - scenarioData.Close() + _ = scenarioData.Close() s.logger.Error("Failed to get scenario counter info from db", zap.Error(err)) doAckBufSucceed(s, pkt.AckHandle, make([]byte, 1)) return diff --git a/server/channelserver/handlers_character.go b/server/channelserver/handlers_character.go index d86125a64..f46200280 100644 --- a/server/channelserver/handlers_character.go +++ b/server/channelserver/handlers_character.go @@ -129,7 +129,7 @@ func GetCharacterSaveData(s *Session, charID uint32) (*CharacterSaveData, error) s.logger.Error("Failed to get savedata", zap.Error(err), zap.Uint32("charID", charID)) return nil, err } - defer result.Close() + defer func() { _ = result.Close() }() if !result.Next() { err = errors.New("no savedata found") s.logger.Error("No savedata found", zap.Uint32("charID", charID)) diff --git a/server/channelserver/handlers_data.go b/server/channelserver/handlers_data.go index 2379b0220..64b995a42 100644 --- a/server/channelserver/handlers_data.go +++ b/server/channelserver/handlers_data.go @@ -75,7 +75,7 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) { characterSaveData.Save(s) s.logger.Info("Wrote recompressed savedata back to DB.") } else { - s.rawConn.Close() + _ = s.rawConn.Close() s.logger.Warn("Save cancelled due to corruption.") if s.server.erupeConfig.DeleteOnSaveCorruption { if _, err := s.server.db.Exec("UPDATE characters SET deleted=true WHERE id=$1", s.charID); err != nil { @@ -164,7 +164,7 @@ func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) { err := s.server.db.QueryRow("SELECT savedata FROM characters WHERE id = $1", s.charID).Scan(&data) if err != nil || len(data) == 0 { s.logger.Warn(fmt.Sprintf("Failed to load savedata (CID: %d)", s.charID), zap.Error(err)) - s.rawConn.Close() // Terminate the connection + _ = s.rawConn.Close() // Terminate the connection return } doAckBufSucceed(s, pkt.AckHandle, data) diff --git a/server/channelserver/handlers_diva.go b/server/channelserver/handlers_diva.go index 932aaddc5..0f0a4782b 100644 --- a/server/channelserver/handlers_diva.go +++ b/server/channelserver/handlers_diva.go @@ -73,7 +73,7 @@ func handleMsgMhfGetUdSchedule(s *Session, p mhfpacket.MHFPacket) { if err != nil { s.logger.Error("Failed to query diva schedule", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { _ = rows.Scan(&id, &start) } diff --git a/server/channelserver/handlers_event.go b/server/channelserver/handlers_event.go index 7fbbb9d26..71d08eac5 100644 --- a/server/channelserver/handlers_event.go +++ b/server/channelserver/handlers_event.go @@ -139,7 +139,7 @@ func handleMsgMhfGetKeepLoginBoostStatus(s *Session, p mhfpacket.MHFPacket) { var loginBoosts []loginBoost rows, err := s.server.db.Queryx("SELECT week_req, expiration, reset FROM login_boost WHERE char_id=$1 ORDER BY week_req", s.charID) if err != nil || s.server.erupeConfig.GameplayOptions.DisableLoginBoost { - rows.Close() + _ = rows.Close() doAckBufSucceed(s, pkt.AckHandle, make([]byte, 35)) return } diff --git a/server/channelserver/handlers_festa.go b/server/channelserver/handlers_festa.go index 16e54209e..88edf35df 100644 --- a/server/channelserver/handlers_festa.go +++ b/server/channelserver/handlers_festa.go @@ -193,7 +193,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) { if err != nil { s.logger.Error("Failed to query festa schedule", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { _ = rows.Scan(&id, &start) } @@ -252,7 +252,7 @@ func handleMsgMhfInfoFesta(s *Session, p mhfpacket.MHFPacket) { if err != nil { s.logger.Error("Failed to query festa trials", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { if err := rows.StructScan(&trial); err != nil { continue @@ -575,7 +575,7 @@ func handleMsgMhfEnumerateFestaPersonalPrize(s *Session, p mhfpacket.MHFPacket) if err != nil { s.logger.Error("Failed to query festa personal prizes", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { prize := &Prize{} if err := rows.StructScan(&prize); err != nil { @@ -605,7 +605,7 @@ func handleMsgMhfEnumerateFestaIntermediatePrize(s *Session, p mhfpacket.MHFPack if err != nil { s.logger.Error("Failed to query festa intermediate prizes", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { prize := &Prize{} if err := rows.StructScan(&prize); err != nil { diff --git a/server/channelserver/handlers_guild.go b/server/channelserver/handlers_guild.go index 5b6e71ba9..5fda7f637 100644 --- a/server/channelserver/handlers_guild.go +++ b/server/channelserver/handlers_guild.go @@ -556,7 +556,7 @@ func GetGuildInfoByID(s *Session, guildID uint32) (*Guild, error) { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() hasRow := rows.Next() @@ -591,7 +591,7 @@ func GetGuildInfoByCharacterId(s *Session, charID uint32) (*Guild, error) { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() hasRow := rows.Next() @@ -1884,7 +1884,7 @@ func handleMsgMhfGuildHuntdata(s *Session, p mhfpacket.MHFPacket) { continue } if count == 255 { - rows.Close() + _ = rows.Close() break } count++ diff --git a/server/channelserver/handlers_guild_alliance.go b/server/channelserver/handlers_guild_alliance.go index 70f360674..4ac09f62e 100644 --- a/server/channelserver/handlers_guild_alliance.go +++ b/server/channelserver/handlers_guild_alliance.go @@ -52,7 +52,7 @@ func GetAllianceData(s *Session, AllianceID uint32) (*GuildAlliance, error) { s.logger.Error("Failed to retrieve alliance data from database", zap.Error(err)) return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() hasRow := rows.Next() if !hasRow { return nil, nil diff --git a/server/channelserver/handlers_guild_member.go b/server/channelserver/handlers_guild_member.go index a66d4f330..e11faf4d2 100644 --- a/server/channelserver/handlers_guild_member.go +++ b/server/channelserver/handlers_guild_member.go @@ -103,7 +103,7 @@ func GetGuildMembers(s *Session, guildID uint32, applicants bool) ([]*GuildMembe return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() members := make([]*GuildMember, 0) @@ -128,7 +128,7 @@ func GetCharacterGuildData(s *Session, charID uint32) (*GuildMember, error) { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() hasRow := rows.Next() diff --git a/server/channelserver/handlers_guild_scout.go b/server/channelserver/handlers_guild_scout.go index c2c386d96..ba87f1ca5 100644 --- a/server/channelserver/handlers_guild_scout.go +++ b/server/channelserver/handlers_guild_scout.go @@ -216,7 +216,7 @@ func handleMsgMhfGetGuildScoutList(s *Session, p mhfpacket.MHFPacket) { return } - defer rows.Close() + defer func() { _ = rows.Close() }() bf := byteframe.NewByteFrame() diff --git a/server/channelserver/handlers_guild_tresure.go b/server/channelserver/handlers_guild_tresure.go index 7f82945d6..b5896c7ab 100644 --- a/server/channelserver/handlers_guild_tresure.go +++ b/server/channelserver/handlers_guild_tresure.go @@ -50,7 +50,7 @@ func handleMsgMhfEnumerateGuildTresure(s *Session, p mhfpacket.MHFPacket) { WHERE gh.guild_id=$2 AND gh.level=2 AND gh.acquired=TRUE `, s.charID, guild.ID) if err != nil { - rows.Close() + _ = rows.Close() doAckBufSucceed(s, pkt.AckHandle, make([]byte, 4)) return } else { diff --git a/server/channelserver/handlers_house.go b/server/channelserver/handlers_house.go index 2cccb4ffe..ebcb1b6bc 100644 --- a/server/channelserver/handlers_house.go +++ b/server/channelserver/handlers_house.go @@ -101,7 +101,7 @@ func handleMsgMhfEnumerateHouse(s *Session, p mhfpacket.MHFPacket) { if err != nil { s.logger.Error("Failed to query houses by name", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { if err := rows.StructScan(&house); err == nil { houses = append(houses, house) diff --git a/server/channelserver/handlers_mail.go b/server/channelserver/handlers_mail.go index 7c245ce4b..e5966067d 100644 --- a/server/channelserver/handlers_mail.go +++ b/server/channelserver/handlers_mail.go @@ -108,7 +108,7 @@ func GetMailListForCharacter(s *Session, charID uint32) ([]Mail, error) { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() allMail := make([]Mail, 0) diff --git a/server/channelserver/handlers_mercenary.go b/server/channelserver/handlers_mercenary.go index ede00e1f8..67b19059f 100644 --- a/server/channelserver/handlers_mercenary.go +++ b/server/channelserver/handlers_mercenary.go @@ -227,7 +227,7 @@ func handleMsgMhfReadMercenaryW(s *Session, p mhfpacket.MHFPacket) { if err != nil { s.logger.Error("Failed to query mercenary loans", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { if err := rows.Scan(&name, &cid, &pactID); err != nil { continue diff --git a/server/channelserver/handlers_quest.go b/server/channelserver/handlers_quest.go index aefac558e..1eb8408ba 100644 --- a/server/channelserver/handlers_quest.go +++ b/server/channelserver/handlers_quest.go @@ -422,7 +422,7 @@ func handleMsgMhfEnumerateQuest(s *Session, p mhfpacket.MHFPacket) { } } - rows.Close() + _ = rows.Close() _ = tx.Commit() } diff --git a/server/channelserver/handlers_rengoku.go b/server/channelserver/handlers_rengoku.go index 49147614c..2f02601ef 100644 --- a/server/channelserver/handlers_rengoku.go +++ b/server/channelserver/handlers_rengoku.go @@ -159,7 +159,7 @@ func handleMsgMhfEnumerateRengokuRanking(s *Session, p mhfpacket.MHFPacket) { doAckBufSucceed(s, pkt.AckHandle, make([]byte, 11)) return } - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { _ = rows.StructScan(&score) diff --git a/server/channelserver/handlers_tower.go b/server/channelserver/handlers_tower.go index fc37c2ac6..c48d9f1fc 100644 --- a/server/channelserver/handlers_tower.go +++ b/server/channelserver/handlers_tower.go @@ -327,7 +327,7 @@ func handleMsgMhfGetTenrouirai(s *Session, p mhfpacket.MHFPacket) { if err != nil { s.logger.Error("Failed to query tower mission scores", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { temp := TenrouiraiCharScore{} _ = rows.Scan(&temp.Name, &temp.Score) diff --git a/server/channelserver/sys_channel_server.go b/server/channelserver/sys_channel_server.go index 843ebfd8f..d4309cf82 100644 --- a/server/channelserver/sys_channel_server.go +++ b/server/channelserver/sys_channel_server.go @@ -223,7 +223,7 @@ func (s *Server) Shutdown() { s.isShuttingDown = true s.Unlock() - s.listener.Close() + _ = s.listener.Close() close(s.acceptConns) } @@ -420,7 +420,7 @@ func (s *Server) DisconnectUser(uid uint32) { if err != nil { s.logger.Error("Failed to query characters for disconnect", zap.Error(err)) } else { - defer rows.Close() + defer func() { _ = rows.Close() }() for rows.Next() { _ = rows.Scan(&cid) cids = append(cids, cid) @@ -430,7 +430,7 @@ func (s *Server) DisconnectUser(uid uint32) { for _, session := range c.sessions { for _, cid := range cids { if session.charID == cid { - session.rawConn.Close() + _ = session.rawConn.Close() break } } diff --git a/server/channelserver/testhelpers_db.go b/server/channelserver/testhelpers_db.go index 2f7b1ac73..7dee79692 100644 --- a/server/channelserver/testhelpers_db.go +++ b/server/channelserver/testhelpers_db.go @@ -60,7 +60,7 @@ func SetupTestDB(t *testing.T) *sqlx.DB { // Test connection if err := db.Ping(); err != nil { - db.Close() + _ = db.Close() t.Skipf("Test database not available: %v. Run: docker compose -f docker/docker-compose.test.yml up -d", err) return nil } @@ -207,7 +207,7 @@ func findProjectRoot(t *testing.T) string { func TeardownTestDB(t *testing.T, db *sqlx.DB) { t.Helper() if db != nil { - db.Close() + _ = db.Close() } } diff --git a/server/entranceserver/entrance_server.go b/server/entranceserver/entrance_server.go index 35c227b4b..67d92b103 100644 --- a/server/entranceserver/entrance_server.go +++ b/server/entranceserver/entrance_server.go @@ -65,7 +65,7 @@ func (s *Server) Shutdown() { s.Unlock() // This will cause the acceptor goroutine to error and exit gracefully. - s.listener.Close() + _ = s.listener.Close() } // acceptClients handles accepting new clients in a loop. @@ -91,7 +91,7 @@ func (s *Server) acceptClients() { } func (s *Server) handleEntranceServerConnection(conn net.Conn) { - defer conn.Close() + defer func() { _ = conn.Close() }() // Client initalizes the connection with a one-time buffer of 8 NULL bytes. nullInit := make([]byte, 8) n, err := io.ReadFull(conn, nullInit) diff --git a/server/entranceserver/entrance_server_test.go b/server/entranceserver/entrance_server_test.go index c04a8925e..dd9832b3f 100644 --- a/server/entranceserver/entrance_server_test.go +++ b/server/entranceserver/entrance_server_test.go @@ -445,7 +445,7 @@ func TestServerHandleConnectionImmediateClose(t *testing.T) { if err != nil { t.Fatalf("Dial() error: %v", err) } - conn.Close() + _ = conn.Close() time.Sleep(50 * time.Millisecond) } @@ -477,7 +477,7 @@ func TestServerHandleConnectionShortInit(t *testing.T) { t.Fatalf("Dial() error: %v", err) } _, _ = conn.Write([]byte{0, 0, 0, 0}) - conn.Close() + _ = conn.Close() time.Sleep(50 * time.Millisecond) } @@ -517,6 +517,6 @@ func TestServerMultipleConnections(t *testing.T) { time.Sleep(50 * time.Millisecond) for _, conn := range conns { - conn.Close() + _ = conn.Close() } } diff --git a/server/signserver/session_test.go b/server/signserver/session_test.go index f60f274b0..8142e3a2b 100644 --- a/server/signserver/session_test.go +++ b/server/signserver/session_test.go @@ -354,8 +354,8 @@ func TestSessionWorkWithDevModeLogging(t *testing.T) { } clientConn, serverConn := net.Pipe() - defer clientConn.Close() - defer serverConn.Close() + defer func() { _ = clientConn.Close() }() + defer func() { _ = serverConn.Close() }() session := &Session{ logger: logger, @@ -364,7 +364,7 @@ func TestSessionWorkWithDevModeLogging(t *testing.T) { cryptConn: network.NewCryptConn(serverConn), } - clientConn.Close() + _ = clientConn.Close() session.work() } @@ -380,7 +380,7 @@ func TestSessionWorkWithEmptyRead(t *testing.T) { } clientConn, serverConn := net.Pipe() - defer serverConn.Close() + defer func() { _ = serverConn.Close() }() session := &Session{ logger: logger, @@ -389,7 +389,7 @@ func TestSessionWorkWithEmptyRead(t *testing.T) { cryptConn: network.NewCryptConn(serverConn), } - clientConn.Close() + _ = clientConn.Close() session.work() } diff --git a/server/signserver/sign_server.go b/server/signserver/sign_server.go index c97b9da9a..4eae7ecea 100644 --- a/server/signserver/sign_server.go +++ b/server/signserver/sign_server.go @@ -61,7 +61,7 @@ func (s *Server) Shutdown() { s.Unlock() // This will cause the acceptor goroutine to error and exit gracefully. - s.listener.Close() + _ = s.listener.Close() } func (s *Server) acceptClients() { @@ -86,7 +86,7 @@ func (s *Server) acceptClients() { func (s *Server) handleConnection(conn net.Conn) { s.logger.Debug("New connection", zap.String("RemoteAddr", conn.RemoteAddr().String())) - defer conn.Close() + defer func() { _ = conn.Close() }() // Client initalizes the connection with a one-time buffer of 8 NULL bytes. nullInit := make([]byte, 8) diff --git a/server/signserver/sign_server_test.go b/server/signserver/sign_server_test.go index 1c03d6c8b..7921fce8e 100644 --- a/server/signserver/sign_server_test.go +++ b/server/signserver/sign_server_test.go @@ -434,7 +434,7 @@ func TestServerHandleConnection(t *testing.T) { if err != nil { t.Fatalf("Dial() error: %v", err) } - defer conn.Close() + defer func() { _ = conn.Close() }() nullInit := make([]byte, 8) _, err = conn.Write(nullInit) @@ -472,7 +472,7 @@ func TestServerHandleConnectionWithShortInit(t *testing.T) { } _, _ = conn.Write([]byte{0, 0, 0, 0}) - conn.Close() + _ = conn.Close() time.Sleep(50 * time.Millisecond) } @@ -502,7 +502,7 @@ func TestServerHandleConnectionImmediateClose(t *testing.T) { if err != nil { t.Fatalf("Dial() error: %v", err) } - conn.Close() + _ = conn.Close() time.Sleep(50 * time.Millisecond) } @@ -544,7 +544,7 @@ func TestServerMultipleConnections(t *testing.T) { time.Sleep(50 * time.Millisecond) for _, conn := range conns { - conn.Close() + _ = conn.Close() } }