mirror of
				https://github.com/xjasonlyu/tun2socks.git
				synced 2025-10-31 20:12:41 +08:00 
			
		
		
		
	Improve(stack): add TCP recovery option
This commit is contained in:
		| @@ -42,6 +42,9 @@ const ( | ||||
| 	// tcp selective ACK. | ||||
| 	tcpSACKEnabled = true | ||||
|  | ||||
| 	// tcpRecovery is the loss detection algorithm used by TCP. | ||||
| 	tcpRecovery = tcpip.TCPRACKLossDetection | ||||
|  | ||||
| 	// tcpMinBufferSize is the smallest size of a send/recv buffer. | ||||
| 	tcpMinBufferSize = tcp.MinBufferSize // 4 KiB | ||||
|  | ||||
| @@ -82,6 +85,17 @@ func WithDefault() Option { | ||||
| 			// TCP selective ACK Option, see: | ||||
| 			// https://tools.ietf.org/html/rfc2018 | ||||
| 			WithTCPSACKEnabled(tcpSACKEnabled), | ||||
|  | ||||
| 			// TCPRACKLossDetection: indicates RACK is used for loss detection and | ||||
| 			// recovery. | ||||
| 			// | ||||
| 			// TCPRACKStaticReoWnd: indicates the reordering window should not be | ||||
| 			// adjusted when DSACK is received. | ||||
| 			// | ||||
| 			// TCPRACKNoDupTh: indicates RACK should not consider the classic three | ||||
| 			// duplicate acknowledgements rule to mark the segments as lost. This | ||||
| 			// is used when reordering is not detected. | ||||
| 			WithTCPRecovery(tcpRecovery), | ||||
| 		} | ||||
|  | ||||
| 		for _, opt := range opts { | ||||
| @@ -197,3 +211,13 @@ func WithTCPSACKEnabled(v bool) Option { | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // WithTCPRecovery sets the recovery option for TCP. | ||||
| func WithTCPRecovery(v tcpip.TCPRecovery) Option { | ||||
| 	return func(s *Stack) error { | ||||
| 		if err := s.SetTransportProtocolOption(tcp.ProtocolNumber, &v); err != nil { | ||||
| 			return fmt.Errorf("set TCP Recovery: %s", err) | ||||
| 		} | ||||
| 		return nil | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 xjasonlyu
					xjasonlyu