|  | @@ -72,8 +72,8 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn internet
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func (s *Server) processTCP(ctx context.Context, conn internet.Connection) error {
 |  |  func (s *Server) processTCP(ctx context.Context, conn internet.Connection) error {
 | 
											
												
													
														|  | -	timedReader := net.NewTimeOutReader(16 /* seconds, for handshake */, conn)
 |  | 
 | 
											
												
													
														|  | -	reader := bufio.NewReader(timedReader)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	conn.SetReadDeadline(time.Now().Add(time.Second * 8))
 | 
											
												
													
														|  | 
 |  | +	reader := bufio.NewReader(conn)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	inboundDest := proxy.InboundDestinationFromContext(ctx)
 |  |  	inboundDest := proxy.InboundDestinationFromContext(ctx)
 | 
											
												
													
														|  |  	session := &ServerSession{
 |  |  	session := &ServerSession{
 | 
											
										
											
												
													
														|  | @@ -88,13 +88,13 @@ func (s *Server) processTCP(ctx context.Context, conn internet.Connection) error
 | 
											
												
													
														|  |  		log.Info("Socks|Server: Failed to read request: ", err)
 |  |  		log.Info("Socks|Server: Failed to read request: ", err)
 | 
											
												
													
														|  |  		return err
 |  |  		return err
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  | 
 |  | +	conn.SetReadDeadline(time.Time{})
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	if request.Command == protocol.RequestCommandTCP {
 |  |  	if request.Command == protocol.RequestCommandTCP {
 | 
											
												
													
														|  |  		dest := request.Destination()
 |  |  		dest := request.Destination()
 | 
											
												
													
														|  |  		log.Info("Socks|Server: TCP Connect request to ", dest)
 |  |  		log.Info("Socks|Server: TCP Connect request to ", dest)
 | 
											
												
													
														|  |  		log.Access(source, dest, log.AccessAccepted, "")
 |  |  		log.Access(source, dest, log.AccessAccepted, "")
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -		timedReader.SetTimeOut(s.config.Timeout)
 |  | 
 | 
											
												
													
														|  |  		ctx = proxy.ContextWithDestination(ctx, dest)
 |  |  		ctx = proxy.ContextWithDestination(ctx, dest)
 | 
											
												
													
														|  |  		return s.transport(ctx, reader, conn)
 |  |  		return s.transport(ctx, reader, conn)
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
										
											
												
													
														|  | @@ -117,7 +117,11 @@ func (*Server) handleUDP() error {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  func (v *Server) transport(ctx context.Context, reader io.Reader, writer io.Writer) error {
 |  |  func (v *Server) transport(ctx context.Context, reader io.Reader, writer io.Writer) error {
 | 
											
												
													
														|  |  	ctx, cancel := context.WithCancel(ctx)
 |  |  	ctx, cancel := context.WithCancel(ctx)
 | 
											
												
													
														|  | -	timer := signal.CancelAfterInactivity(ctx, cancel, time.Minute*2)
 |  | 
 | 
											
												
													
														|  | 
 |  | +	timeout := time.Second * time.Duration(v.config.Timeout)
 | 
											
												
													
														|  | 
 |  | +	if timeout == 0 {
 | 
											
												
													
														|  | 
 |  | +		timeout = time.Minute * 2
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	timer := signal.CancelAfterInactivity(ctx, cancel, timeout)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	ray := v.packetDispatcher.DispatchToOutbound(ctx)
 |  |  	ray := v.packetDispatcher.DispatchToOutbound(ctx)
 | 
											
												
													
														|  |  	input := ray.InboundInput()
 |  |  	input := ray.InboundInput()
 |