| 
					
				 | 
			
			
				@@ -8,15 +8,14 @@ import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"sync" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"time" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"github.com/gorilla/websocket" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"v2ray.com/core/app/log" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"v2ray.com/core/common" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"v2ray.com/core/common/errors" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"v2ray.com/core/app/log" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	v2net "v2ray.com/core/common/net" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"v2ray.com/core/transport/internet" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	v2tls "v2ray.com/core/transport/internet/tls" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"github.com/gorilla/websocket" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"v2ray.com/core/transport/internet/internal" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	v2tls "v2ray.com/core/transport/internet/tls" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var ( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -68,7 +67,7 @@ func ListenWS(address v2net.Address, port v2net.Port, options internet.ListenOpt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (wsl *WSListener) listenws(address v2net.Address, port v2net.Port) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	http.HandleFunc("/"+wsl.config.Path, func(w http.ResponseWriter, r *http.Request) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		con, err := wsl.converttovws(w, r) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		conn, err := wsl.converttovws(w, r) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			log.Warning("WebSocket|Listener: Failed to convert connection: ", err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -76,17 +75,17 @@ func (wsl *WSListener) listenws(address v2net.Address, port v2net.Port) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		select { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case wsl.awaitingConns <- &ConnectionWithError{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			conn: con, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			conn: conn, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if con != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				con.Close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if conn != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				conn.Close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	errchan := make(chan error) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	errchan := make(chan error, 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	listenerfunc := func() error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ol, err := net.Listen("tcp", address.String()+":"+strconv.Itoa(int(port.Value()))) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -114,14 +113,13 @@ func (wsl *WSListener) listenws(address v2net.Address, port v2net.Port) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	go func() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		err := listenerfunc() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		errchan <- err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var err error 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	select { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	case err = <-errchan: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	case <-time.After(time.Second * 2): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//Should this listen fail after 2 sec, it could gone untracked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case <-time.After(time.Second * 5): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//Should this listen fail after 5 sec, it could gone untracked. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -158,7 +156,7 @@ func (v *WSListener) Accept() (internet.Connection, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if connErr.err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				return nil, connErr.err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return internal.NewConnection(internal.ConnectionID{}, connErr.conn.(*wsconn), v, internal.ReuseConnection(v.config.IsConnectionReuse())), nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return internal.NewConnection(internal.ConnectionID{}, connErr.conn, v, internal.ReuseConnection(v.config.IsConnectionReuse())), nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		case <-time.After(time.Second * 2): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 |