1 Star 0 Fork 0

Jollia Golang Library/JoKode

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
net.go 1.24 KB
一键复制 编辑 原始数据 按行查看 历史
Jollia 提交于 2024-10-06 00:15 +08:00 . 移入 http-client 等能力
package jokode
import (
"fmt"
"github.com/pkg/errors"
"net"
"strconv"
"strings"
"time"
)
func ParseAddr(addr string) (host string, port int, err error) {
idx := strings.LastIndexByte(addr, ':')
portStr := "0"
if idx > 0 {
host = addr[:idx]
portStr = addr[idx+1:]
} else {
host = addr
}
if port, err = strconv.Atoi(portStr); err != nil {
return "", -1, errors.Wrapf(err, "try convert port info '%s' to number fail", portStr)
} else {
return host, port, nil
}
}
func GetLocalIpByRemoteTcp(remoteHost string, remotePort uint64, timeOut time.Duration) (net.IP, error) {
var connObj net.Conn
defer func() {
if connObj != nil {
if err := connObj.Close(); err != nil {
Logger().Errorf("try close tcp connection fail, error info: %v", err)
}
connObj = nil
}
}()
if conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", remoteHost, remotePort), timeOut); err != nil {
return nil, errors.Wrapf(err, "try connect remote addr '%s:%d' fail", remoteHost, remotePort)
} else {
localAddrStr := conn.LocalAddr().String()
if localAddr, err2 := net.ResolveTCPAddr("tcp", localAddrStr); err2 != nil {
return nil, errors.Wrapf(err2, "try parse local addr '%s' fail", localAddrStr)
} else {
return localAddr.IP, nil
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/jolib/jokode.git
git@gitee.com:jolib/jokode.git
jolib
jokode
JoKode
v0.8.5

搜索帮助