37 Star 211 Fork 108

狂奔的蜗牛./anytunnel

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
serve-channel.go 1.91 KB
一键复制 编辑 原始数据 按行查看 历史
arraykeys 提交于 2019-08-08 17:13 +08:00 . init
package at_common
import (
"fmt"
"net"
)
type ServerChannel struct {
ip string
port int
Listener *net.Listener
UDPListener *net.UDPConn
errAcceptHandler func(err error)
}
func NewServerChannel(ip string, port int) ServerChannel {
return ServerChannel{
ip: ip,
port: port,
errAcceptHandler: func(err error) {
fmt.Printf("accept error , ERR:%s", err)
},
}
}
func (sc *ServerChannel) SetErrAcceptHandler(fn func(err error)) {
sc.errAcceptHandler = fn
}
func (sc *ServerChannel) ListenTls(fn func(channel MessageChannel, conn net.Conn)) (err error) {
sc.Listener, err = ListenTls(sc.ip, sc.port)
if err == nil {
go func() {
for {
var conn net.Conn
conn, err = (*sc.Listener).Accept()
if err == nil {
go func() {
fn(NewMessageChannel(&conn), conn)
}()
} else {
sc.errAcceptHandler(err)
(*sc.Listener).Close()
break
}
}
}()
}
return
}
func (sc *ServerChannel) ListenTCP(fn func(channel MessageChannel, conn net.Conn)) (err error) {
l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", sc.ip, sc.port))
if err == nil {
sc.Listener = &l
go func() {
for {
var conn net.Conn
conn, err = (*sc.Listener).Accept()
if err == nil {
go func() {
fn(NewMessageChannel(&conn), conn)
}()
} else {
sc.errAcceptHandler(err)
break
}
}
}()
}
return
}
func (sc *ServerChannel) ListenUDP(fn func(packet []byte, localAddr, srcAddr *net.UDPAddr)) (err error) {
addr := &net.UDPAddr{IP: net.ParseIP(sc.ip), Port: sc.port}
l, err := net.ListenUDP("udp", addr)
if err == nil {
sc.UDPListener = l
go func() {
for {
var buf = make([]byte, 2048)
n, srcAddr, err := (*sc.UDPListener).ReadFromUDP(buf)
if err == nil {
packet := buf[0:n]
go func() {
fn(packet, addr, srcAddr)
}()
} else {
sc.errAcceptHandler(err)
break
}
}
}()
}
return
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/snail/anytunnel.git
git@gitee.com:snail/anytunnel.git
snail
anytunnel
anytunnel
8296c84158a6

搜索帮助