mirror of https://github.com/v2ray/v2ray-core
				
				
				
			WriteMultiBuffer for mKCP
							parent
							
								
									69b51bffbb
								
							
						
					
					
						commit
						83920a091e
					
				| 
						 | 
				
			
			@ -8,6 +8,7 @@ import (
 | 
			
		|||
	"time"
 | 
			
		||||
 | 
			
		||||
	"v2ray.com/core/app/log"
 | 
			
		||||
	"v2ray.com/core/common/buf"
 | 
			
		||||
	"v2ray.com/core/common/predicate"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -330,6 +331,31 @@ func (v *Connection) Write(b []byte) (int, error) {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Connection) WriteMultiBuffer(mb buf.MultiBuffer) (int, error) {
 | 
			
		||||
	defer mb.Release()
 | 
			
		||||
 | 
			
		||||
	if len(mb) == 0 {
 | 
			
		||||
		return 0, nil
 | 
			
		||||
	}
 | 
			
		||||
	if len(mb) == 1 {
 | 
			
		||||
		return c.Write(mb[0].Bytes())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	buffer := buf.New()
 | 
			
		||||
	defer buffer.Release()
 | 
			
		||||
 | 
			
		||||
	totalBytes := 0
 | 
			
		||||
	for !mb.IsEmpty() {
 | 
			
		||||
		buffer.Reset(buf.ReadFrom(&mb))
 | 
			
		||||
		nBytes, err := c.Write(buffer.Bytes())
 | 
			
		||||
		totalBytes += nBytes
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return totalBytes, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return totalBytes, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Connection) SetState(state State) {
 | 
			
		||||
	current := v.Elapsed()
 | 
			
		||||
	atomic.StoreInt32((*int32)(&v.state), int32(state))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue