mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-12-08 10:50:24 +08:00
设置客户端连接linger为0
This commit is contained in:
@@ -42,17 +42,23 @@ func init() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// TrafficConn 用于统计流量的连接
|
// ClientConn 客户端连接
|
||||||
type TrafficConn struct {
|
type ClientConn struct {
|
||||||
rawConn net.Conn
|
rawConn net.Conn
|
||||||
isClosed bool
|
isClosed bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTrafficConn(conn net.Conn) net.Conn {
|
func NewClientConn(conn net.Conn) net.Conn {
|
||||||
return &TrafficConn{rawConn: conn}
|
tcpConn, ok := conn.(*net.TCPConn)
|
||||||
|
if ok {
|
||||||
|
// TODO 可以设置此值
|
||||||
|
_ = tcpConn.SetLinger(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &ClientConn{rawConn: conn}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) Read(b []byte) (n int, err error) {
|
func (this *ClientConn) Read(b []byte) (n int, err error) {
|
||||||
n, err = this.rawConn.Read(b)
|
n, err = this.rawConn.Read(b)
|
||||||
if n > 0 {
|
if n > 0 {
|
||||||
atomic.AddUint64(&inTrafficBytes, uint64(n))
|
atomic.AddUint64(&inTrafficBytes, uint64(n))
|
||||||
@@ -60,7 +66,7 @@ func (this *TrafficConn) Read(b []byte) (n int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) Write(b []byte) (n int, err error) {
|
func (this *ClientConn) Write(b []byte) (n int, err error) {
|
||||||
n, err = this.rawConn.Write(b)
|
n, err = this.rawConn.Write(b)
|
||||||
if n > 0 {
|
if n > 0 {
|
||||||
atomic.AddUint64(&outTrafficBytes, uint64(n))
|
atomic.AddUint64(&outTrafficBytes, uint64(n))
|
||||||
@@ -68,31 +74,31 @@ func (this *TrafficConn) Write(b []byte) (n int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) Close() error {
|
func (this *ClientConn) Close() error {
|
||||||
this.isClosed = true
|
this.isClosed = true
|
||||||
return this.rawConn.Close()
|
return this.rawConn.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) LocalAddr() net.Addr {
|
func (this *ClientConn) LocalAddr() net.Addr {
|
||||||
return this.rawConn.LocalAddr()
|
return this.rawConn.LocalAddr()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) RemoteAddr() net.Addr {
|
func (this *ClientConn) RemoteAddr() net.Addr {
|
||||||
return this.rawConn.RemoteAddr()
|
return this.rawConn.RemoteAddr()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) SetDeadline(t time.Time) error {
|
func (this *ClientConn) SetDeadline(t time.Time) error {
|
||||||
return this.rawConn.SetDeadline(t)
|
return this.rawConn.SetDeadline(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) SetReadDeadline(t time.Time) error {
|
func (this *ClientConn) SetReadDeadline(t time.Time) error {
|
||||||
return this.rawConn.SetReadDeadline(t)
|
return this.rawConn.SetReadDeadline(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) SetWriteDeadline(t time.Time) error {
|
func (this *ClientConn) SetWriteDeadline(t time.Time) error {
|
||||||
return this.rawConn.SetWriteDeadline(t)
|
return this.rawConn.SetWriteDeadline(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficConn) IsClosed() bool {
|
func (this *ClientConn) IsClosed() bool {
|
||||||
return this.isClosed
|
return this.isClosed
|
||||||
}
|
}
|
||||||
@@ -8,16 +8,16 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TrafficListener 用于统计流量的网络监听
|
// ClientListener 客户端网络监听
|
||||||
type TrafficListener struct {
|
type ClientListener struct {
|
||||||
rawListener net.Listener
|
rawListener net.Listener
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTrafficListener(listener net.Listener) net.Listener {
|
func NewClientListener(listener net.Listener) net.Listener {
|
||||||
return &TrafficListener{rawListener: listener}
|
return &ClientListener{rawListener: listener}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficListener) Accept() (net.Conn, error) {
|
func (this *ClientListener) Accept() (net.Conn, error) {
|
||||||
conn, err := this.rawListener.Accept()
|
conn, err := this.rawListener.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -33,13 +33,13 @@ func (this *TrafficListener) Accept() (net.Conn, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NewTrafficConn(conn), nil
|
return NewClientConn(conn), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficListener) Close() error {
|
func (this *ClientListener) Close() error {
|
||||||
return this.rawListener.Close()
|
return this.rawListener.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *TrafficListener) Addr() net.Addr {
|
func (this *ClientListener) Addr() net.Addr {
|
||||||
return this.rawListener.Addr()
|
return this.rawListener.Addr()
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ func (this *HTTPRequest) doWAFRequest() (blocked bool) {
|
|||||||
// 当前连接是否已关闭
|
// 当前连接是否已关闭
|
||||||
var conn = this.RawReq.Context().Value(HTTPConnContextKey)
|
var conn = this.RawReq.Context().Value(HTTPConnContextKey)
|
||||||
if conn != nil {
|
if conn != nil {
|
||||||
trafficConn, ok := conn.(*TrafficConn)
|
trafficConn, ok := conn.(*ClientConn)
|
||||||
if ok && trafficConn.IsClosed() {
|
if ok && trafficConn.IsClosed() {
|
||||||
this.disableLog = true
|
this.disableLog = true
|
||||||
return true
|
return true
|
||||||
@@ -32,7 +32,7 @@ func (this *HTTPRequest) doWAFRequest() (blocked bool) {
|
|||||||
this.disableLog = true
|
this.disableLog = true
|
||||||
|
|
||||||
if conn != nil {
|
if conn != nil {
|
||||||
trafficConn, ok := conn.(*TrafficConn)
|
trafficConn, ok := conn.(*ClientConn)
|
||||||
if ok && !trafficConn.IsClosed() {
|
if ok && !trafficConn.IsClosed() {
|
||||||
_ = trafficConn.Close()
|
_ = trafficConn.Close()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ func (this *Listener) listenTCP() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
netListener = NewTrafficListener(netListener)
|
netListener = NewClientListener(netListener)
|
||||||
events.On(events.EventQuit, func() {
|
events.On(events.EventQuit, func() {
|
||||||
remotelogs.Println("LISTENER", "quit "+this.group.FullAddr())
|
remotelogs.Println("LISTENER", "quit "+this.group.FullAddr())
|
||||||
_ = netListener.Close()
|
_ = netListener.Close()
|
||||||
|
|||||||
Reference in New Issue
Block a user