Merge pull request #656 from milosgajdos83/tun-listener
Close the tunnel listener when the tunnel is cloed.
This commit is contained in:
		| @@ -430,6 +430,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 | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user