1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package main
- import (
- "fmt"
- "net"
- "os"
- "path"
- "strconv"
- "strings"
- )
- func GetFreePort() (int, error) {
- addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
- if err != nil {
- return 0, err
- }
- l, err := net.ListenTCP("tcp", addr)
- if err != nil {
- return 0, err
- }
- defer l.Close()
- return l.Addr().(*net.TCPAddr).Port, nil
- }
- func createPorts() (ws int, nport int, err error) {
- ws, err = GetFreePort()
- if err != nil {
- return
- }
- nport, err = GetFreePort()
- if err != nil {
- return
- }
- return
- }
- func GenHttpPort() (int, int, error) {
- portFile := path.Join(AppDataDir, "ports")
- portStr, err := os.ReadFile(portFile)
- if err == nil && len(portStr) > 0 {
- ports := strings.Split(string(portStr), "#")
- wsport, _ := strconv.Atoi(ports[0])
- nsport, _ := strconv.Atoi(ports[1])
- return wsport, nsport, nil
- }
- p1, p2, e := createPorts()
- if e != nil {
- return 0, 0, e
- }
- os.WriteFile(portFile, []byte(fmt.Sprintf("%d#%d", p1, p2)), os.ModePerm)
- return p1, p2, nil
- }
|