Close the tunnel listener when the tunnel is cloed.

This commit is contained in:
Milos Gajdos 2019-08-08 15:20:53 +01:00
parent c7e8a2aeb9
commit 9eb45dac82
No known key found for this signature in database
GPG Key ID: 8B31058CC55DFD4F
3 changed files with 10 additions and 0 deletions

View File

@ -418,6 +418,8 @@ func (t *tun) Listen(addr string) (Listener, error) {
accept: make(chan *socket, 128),
// the channel to close
closed: make(chan bool),
// tunnel closed channel
tunClosed: t.closed,
// the connection
conn: c,
// the listener socket

View File

@ -11,6 +11,8 @@ type tunListener struct {
accept chan *socket
// the channel to close
closed chan bool
// the tunnel closed channel
tunClosed chan bool
// the connection
conn Conn
// the listener socket
@ -74,6 +76,7 @@ func (t *tunListener) Addr() string {
return t.addr
}
// Close closes tunnel listener
func (t *tunListener) Close() error {
select {
case <-t.closed:
@ -90,6 +93,10 @@ func (t *tunListener) Accept() (Conn, error) {
// if the socket is closed return
case <-t.closed:
return nil, io.EOF
case <-t.tunClosed:
// close the listener when the tunnel closes
close(t.closed)
return nil, io.EOF
// wait for a new connection
case c, ok := <-t.accept:
if !ok {

View File

@ -79,6 +79,7 @@ func (s *socket) Recv(m *transport.Message) error {
return nil
}
// Close closes the socket
func (s *socket) Close() error {
select {
case <-s.closed: