Skip to content

Commit

Permalink
修复windows中,releaseTCP回收后,还在read导致nil的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
luyu6056 committed Feb 21, 2022
1 parent 622624f commit b0880cf
Show file tree
Hide file tree
Showing 6 changed files with 341 additions and 351 deletions.
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,3 @@
3.增加了tls的支持

4.运行单个监听实例下,实现linux平滑重启 -reload,关闭 -stop

5.增加一个WithTCPNoDelay选项,在linux下开启tcp_nodelay,以减少tcp连接产生的延迟

6.增加Client方法,返回一个ClientManage,ClientManage进行Dail后返回一个conn客户端
130 changes: 65 additions & 65 deletions acceptor_windows.go
Original file line number Diff line number Diff line change
@@ -1,65 +1,65 @@
// Copyright 2019 Andy Pan. All rights reserved.
// Copyright 2018 Joshua J Baker. All rights reserved.
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

package gnet

import (
"time"

"github.com/luyu6056/tls"
)

func (svr *server) listenerRun() {
var err error
defer func() { svr.signalShutdown(err) }()
var packet [0x10000]byte
for {
if svr.ln.pconn != nil {
// Read data from UDP socket.
n, addr, e := svr.ln.pconn.ReadFrom(packet[:])
if e != nil {
err = e
return
}
el := svr.subLoopGroup.next()
c := newUDPConn(el, svr.ln.lnaddr, addr)
c.inboundBuffer.Write(packet[:n])
el.ch <- &udpIn{c}
} else {
// Accept TCP socket.
conn, e := svr.ln.ln.Accept()
if e != nil {
err = e
return
}
el := svr.subLoopGroup.next()
c := newTCPConn(conn, el)
if svr.tlsconfig != nil {
if err = c.UpgradeTls(svr.tlsconfig); err != nil {
return
}
}
el.ch <- c
go func() {
var packet = make([]byte, 0x10000)
for {
n, err := c.conn.Read(packet)
if err != nil {
_ = c.conn.SetReadDeadline(time.Time{})
el.ch <- &stderr{c, err}
return
}

msg := msgbufpool.Get().(*tls.MsgBuffer)
msg.Write(packet[:n])
el.ch <- &tcpIn{c, msg}
}
}()
}
}
}
// Copyright 2019 Andy Pan. All rights reserved.
// Copyright 2018 Joshua J Baker. All rights reserved.
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.

//go:build windows
// +build windows

package gnet

import (
"time"

"github.com/luyu6056/tls"
)

func (svr *server) listenerRun() {
var err error
defer func() { svr.signalShutdown(err) }()
var packet [0x10000]byte
for {
if svr.ln.pconn != nil {
// Read data from UDP socket.
n, addr, e := svr.ln.pconn.ReadFrom(packet[:])
if e != nil {
err = e
return
}
el := svr.subLoopGroup.next()
c := newUDPConn(el, svr.ln.lnaddr, addr)
c.inboundBuffer.Write(packet[:n])
el.ch <- &udpIn{c}
} else {
// Accept TCP socket.
conn, e := svr.ln.ln.Accept()
if e != nil {
err = e
return
}
el := svr.subLoopGroup.next()
c := newTCPConn(conn, el)
if svr.tlsconfig != nil {
if err = c.UpgradeTls(svr.tlsconfig); err != nil {
return
}
}
el.ch <- c
go func() {
var packet = make([]byte, 0x10000)
for {
n, err := c.conn.Read(packet)
if err != nil {
_ = c.conn.SetReadDeadline(time.Time{})
el.ch <- tcpClose{c, err}
return
}

msg := msgbufpool.Get().(*tls.MsgBuffer)
msg.Write(packet[:n])
el.ch <- &tcpIn{c, msg}
}
}()
}
}
}
Loading

0 comments on commit b0880cf

Please sign in to comment.