From 3a401968d10d9651d4fe6a47f7d87bb34063932d Mon Sep 17 00:00:00 2001 From: lauk001 Date: Wed, 5 Jun 2024 09:49:45 +0800 Subject: [PATCH] fix bug of tftp service code --- pkg/tftpserver/tftpserver.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/pkg/tftpserver/tftpserver.go b/pkg/tftpserver/tftpserver.go index 6037a140..2a173452 100644 --- a/pkg/tftpserver/tftpserver.go +++ b/pkg/tftpserver/tftpserver.go @@ -20,6 +20,7 @@ import ( "io" "os" "path/filepath" + "sync" "github.com/pin/tftp" "github.com/sirupsen/logrus" @@ -30,21 +31,26 @@ type TFTPService struct { Port string RootDir string server *tftp.Server + mu sync.Mutex } func (t *TFTPService) Start() error { - tftpHandler := TFTPHandler{ + t.mu.Lock() + defer t.mu.Unlock() + + tftpHandler := &TFTPHandler{ RootDir: t.RootDir, } t.server = tftp.NewServer(tftpHandler.ReadHandler, tftpHandler.WriteHandler) tftpServerAddr := t.IP + ":" + t.Port logrus.Printf("TFTP server is listening on %s\n", tftpServerAddr) - err := t.server.ListenAndServe(tftpServerAddr) - if err != nil { - logrus.Println(err) - return err - } + go func() { + if err := t.server.ListenAndServe(tftpServerAddr); err != nil { + logrus.Errorf("Failed to start TFTP server: %v", err) + } + }() + logrus.Info("TFTP server has been started successfully") return nil } @@ -87,8 +93,12 @@ func (h *TFTPHandler) WriteHandler(filename string, wt io.WriterTo) error { } func (t *TFTPService) Stop() error { + t.mu.Lock() + defer t.mu.Unlock() + if t.server != nil { t.server.Shutdown() + logrus.Info("TFTP server has been stopped") } t.server = nil -- Gitee