use empty struct as signal context

master
Dingjun 8 years ago
parent 05e2ae4e0c
commit 1eaade8434

@ -17,7 +17,7 @@ type Client struct {
sshConn ssh.Conn
client *ssh.Client
listeners []net.Listener
ch chan int
ch chan struct{}
}
// NewClient create a new ssh Client
@ -51,7 +51,7 @@ func NewClient(c net.Conn, config *ssh.ClientConfig, addr string, conf *Conf) (*
sshClient := ssh.NewClient(sshConn, newch, reqs)
client := &Client{
conn: c, sshConn: sshConn, client: sshClient,
ch: make(chan int),
ch: make(chan struct{}),
}
go client.keepAlive(conf.KeepAliveInterval, conf.KeepAliveMax)
return client, nil
@ -74,7 +74,7 @@ func (cc *Client) Run() {
go func() {
cc.sshConn.Wait()
select {
case cc.ch <- 1:
case cc.ch <- struct{}{}:
default:
}
}()
@ -305,7 +305,7 @@ func (cc *Client) keepAlive(interval time.Duration, maxCount int) {
cc.sshConn.Close()
// send exit signal
select {
case cc.ch <- 1:
case cc.ch <- struct{}{}:
default:
}
return
@ -321,7 +321,7 @@ func (cc *Client) registerSignal() {
case s1 := <-c:
Log(ERROR, "signal %d received, exit", s1)
select {
case cc.ch <- 1:
case cc.ch <- struct{}{}:
default:
}
}

@ -12,7 +12,7 @@ type Server struct {
conn net.Conn
sshConn *ssh.ServerConn
forwardedPorts map[string]net.Listener
exitCh chan int
exitCh chan struct{}
}
// NewServer create a new struct for Server
@ -47,7 +47,7 @@ func NewServer(c net.Conn, config *ssh.ServerConfig, conf *Conf) (*Server, error
sc := &Server{conn: c,
sshConn: sshConn,
forwardedPorts: map[string]net.Listener{},
exitCh: make(chan int)}
exitCh: make(chan struct{})}
go sc.handleGlobalRequest(req)
go sc.handleNewChannelRequest(ch)
return sc, nil

@ -22,16 +22,16 @@ var SSHLogLevel = ERROR
func PipeAndClose(c io.ReadWriteCloser, s io.ReadWriteCloser) {
defer c.Close()
defer s.Close()
cc := make(chan int, 2)
cc := make(chan struct{}, 2)
go func() {
io.Copy(c, s)
cc <- 1
cc <- struct{}{}
}()
go func() {
io.Copy(s, c)
cc <- 1
cc <- struct{}{}
}()
<-cc

Loading…
Cancel
Save