mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-03 09:06:36 +08:00
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package port
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"os/exec"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func ForceClosePortConnections(addr string) (err error) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
fmt.Printf("⚠️ ForceClosePortConnections panic recovered: %v\n", r)
|
|
err = nil // 永远返回 nil
|
|
}
|
|
}()
|
|
|
|
if addr == "" {
|
|
fmt.Println("⚠️ 地址为空")
|
|
return nil
|
|
}
|
|
|
|
_, portStr, err := net.SplitHostPort(addr)
|
|
if err != nil {
|
|
fmt.Printf("⚠️ 地址解析失败: %v\n", err)
|
|
return nil
|
|
}
|
|
|
|
port, err := strconv.Atoi(portStr)
|
|
if err != nil {
|
|
fmt.Printf("⚠️ 端口非法: %v\n", err)
|
|
return nil
|
|
}
|
|
|
|
cmd := exec.Command("tcpkill", "-i", "any", "port", fmt.Sprintf("%d", port))
|
|
if err := cmd.Start(); err != nil {
|
|
fmt.Printf("⚠️ 启动 tcpkill 失败: %v\n", err)
|
|
return nil
|
|
}
|
|
|
|
go func() {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
fmt.Printf("⚠️ tcpkill goroutine panic recovered: %v\n", r)
|
|
}
|
|
}()
|
|
time.Sleep(2 * time.Second)
|
|
if cmd.Process != nil {
|
|
if err := cmd.Process.Kill(); err != nil {
|
|
fmt.Printf("⚠️ 终止 tcpkill 失败: %v\n", err)
|
|
}
|
|
}
|
|
}()
|
|
|
|
fmt.Printf("✅ 正在断开端口 %d 上的所有连接...\n", port)
|
|
return nil
|
|
}
|