client net dail timeout (#125)

* client net dail timeout

* Delete conn.go

mux 已变更设计

* Revert "Delete conn.go"

This reverts commit 0c944ec41d.

* Update client.go
pull/291/head
李鹏 2019-12-01 23:18:11 +08:00 committed by ffdfgdfg
parent 63543b5675
commit 9bb847df87
2 changed files with 35 additions and 4 deletions

View File

@ -8,12 +8,13 @@ import (
"time" "time"
"github.com/astaxie/beego/logs" "github.com/astaxie/beego/logs"
"github.com/xtaci/kcp-go"
"github.com/cnlh/nps/lib/common" "github.com/cnlh/nps/lib/common"
"github.com/cnlh/nps/lib/config" "github.com/cnlh/nps/lib/config"
"github.com/cnlh/nps/lib/conn" "github.com/cnlh/nps/lib/conn"
"github.com/cnlh/nps/lib/crypt" "github.com/cnlh/nps/lib/crypt"
"github.com/cnlh/nps/lib/mux" "github.com/cnlh/nps/lib/mux"
"github.com/xtaci/kcp-go"
) )
type TRPClient struct { type TRPClient struct {
@ -165,7 +166,7 @@ func (s *TRPClient) handleChan(src net.Conn) {
lk.Host = common.FormatAddress(lk.Host) lk.Host = common.FormatAddress(lk.Host)
//if Conn type is http, read the request and log //if Conn type is http, read the request and log
if lk.ConnType == "http" { if lk.ConnType == "http" {
if targetConn, err := net.Dial(common.CONN_TCP, lk.Host); err != nil { if targetConn, err := net.DialTimeout(common.CONN_TCP, lk.Host, lk.Option.Timeout); err != nil {
logs.Warn("connect to %s error %s", lk.Host, err.Error()) logs.Warn("connect to %s error %s", lk.Host, err.Error())
src.Close() src.Close()
} else { } else {
@ -189,7 +190,7 @@ func (s *TRPClient) handleChan(src net.Conn) {
return return
} }
//connect to target if conn type is tcp or udp //connect to target if conn type is tcp or udp
if targetConn, err := net.Dial(lk.ConnType, lk.Host); err != nil { if targetConn, err := net.DialTimeout(lk.ConnType, lk.Host, lk.Option.Timeout); err != nil {
logs.Warn("connect to %s error %s", lk.Host, err.Error()) logs.Warn("connect to %s error %s", lk.Host, err.Error())
src.Close() src.Close()
} else { } else {

View File

@ -1,5 +1,7 @@
package conn package conn
import "time"
type Secret struct { type Secret struct {
Password string Password string
Conn *Conn Conn *Conn
@ -19,9 +21,20 @@ type Link struct {
Compress bool Compress bool
LocalProxy bool LocalProxy bool
RemoteAddr string RemoteAddr string
Option Options
} }
func NewLink(connType string, host string, crypt bool, compress bool, remoteAddr string, localProxy bool) *Link { type Option func(*Options)
type Options struct {
Timeout time.Duration
}
var defaultTimeOut = time.Second * 5
func NewLink(connType string, host string, crypt bool, compress bool, remoteAddr string, localProxy bool, opts ...Option) *Link {
options := newOptions(opts...)
return &Link{ return &Link{
RemoteAddr: remoteAddr, RemoteAddr: remoteAddr,
ConnType: connType, ConnType: connType,
@ -29,5 +42,22 @@ func NewLink(connType string, host string, crypt bool, compress bool, remoteAddr
Crypt: crypt, Crypt: crypt,
Compress: compress, Compress: compress,
LocalProxy: localProxy, LocalProxy: localProxy,
Option: options,
}
}
func newOptions(opts ...Option) Options {
opt := Options{
Timeout: defaultTimeOut,
}
for _, o := range opts {
o(&opt)
}
return opt
}
func LinkTimeout(t time.Duration) Option {
return func(opt *Options) {
opt.Timeout = t
} }
} }