v4
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"linkmaster-node/internal/config"
|
"linkmaster-node/internal/config"
|
||||||
"linkmaster-node/internal/handler"
|
"linkmaster-node/internal/handler"
|
||||||
@@ -69,17 +70,27 @@ func NewHTTPServer(cfg *config.Config) *HTTPServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *HTTPServer) Start() error {
|
func (s *HTTPServer) Start() error {
|
||||||
// 启动 IPv4 服务器
|
// 先启动 IPv4 服务器(避免端口冲突)
|
||||||
s.wg.Add(1)
|
s.wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer s.wg.Done()
|
defer s.wg.Done()
|
||||||
|
// 使用 net.Listen 明确监听 IPv4,便于错误处理
|
||||||
|
listener, err := net.Listen("tcp4", s.ipv4Server.Addr)
|
||||||
|
if err != nil {
|
||||||
|
s.logger.Error("IPv4服务器监听失败", zap.String("addr", s.ipv4Server.Addr), zap.Error(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
s.logger.Info("HTTP服务器启动 (IPv4)", zap.String("addr", s.ipv4Server.Addr))
|
s.logger.Info("HTTP服务器启动 (IPv4)", zap.String("addr", s.ipv4Server.Addr))
|
||||||
if err := s.ipv4Server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
if err := s.ipv4Server.Serve(listener); err != nil && err != http.ErrServerClosed {
|
||||||
s.logger.Error("IPv4服务器启动失败", zap.Error(err))
|
s.logger.Error("IPv4服务器启动失败", zap.Error(err))
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// 启动 IPv6 服务器
|
// 等待一小段时间,确保 IPv4 先启动
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
|
||||||
|
// 再启动 IPv6 服务器
|
||||||
s.wg.Add(1)
|
s.wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer s.wg.Done()
|
defer s.wg.Done()
|
||||||
@@ -94,8 +105,6 @@ func (s *HTTPServer) Start() error {
|
|||||||
if err := s.ipv6Server.Serve(listener); err != nil && err != http.ErrServerClosed {
|
if err := s.ipv6Server.Serve(listener); err != nil && err != http.ErrServerClosed {
|
||||||
s.logger.Error("IPv6服务器启动失败", zap.Error(err))
|
s.logger.Error("IPv6服务器启动失败", zap.Error(err))
|
||||||
}
|
}
|
||||||
// Serve 返回后关闭监听器
|
|
||||||
listener.Close()
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// 立即返回,服务器在后台运行
|
// 立即返回,服务器在后台运行
|
||||||
|
|||||||
Reference in New Issue
Block a user