fix mux kcp connection

pull/342/head
ffdfgdfg 2019-12-28 20:40:00 +08:00
parent 813eae1216
commit 1f64715fab
3 changed files with 33 additions and 5 deletions

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"github.com/cnlh/nps/lib/common" "github.com/cnlh/nps/lib/common"
"github.com/cnlh/nps/lib/goroutine" "github.com/cnlh/nps/lib/goroutine"
"github.com/xtaci/kcp-go"
"io" "io"
"log" "log"
"net" "net"
@ -33,7 +34,8 @@ func TestNewMux(t *testing.T) {
//poolConnCopy, _ := ants.NewPoolWithFunc(200000, common.copyConn, ants.WithNonblocking(false)) //poolConnCopy, _ := ants.NewPoolWithFunc(200000, common.copyConn, ants.WithNonblocking(false))
time.Sleep(time.Second * 3) time.Sleep(time.Second * 3)
go func() { go func() {
m2 := NewMux(conn2, "tcp") //m2 := NewMux(conn2, "tcp")
m2 := NewMux(conn2, "kcp")
for { for {
//logs.Warn("npc starting accept") //logs.Warn("npc starting accept")
c, err := m2.Accept() c, err := m2.Accept()
@ -82,7 +84,8 @@ func TestNewMux(t *testing.T) {
}() }()
go func() { go func() {
m1 := NewMux(conn1, "tcp") //m1 := NewMux(conn1, "tcp")
m1 := NewMux(conn1, "kcp")
l, err := net.Listen("tcp", "127.0.0.1:7777") l, err := net.Listen("tcp", "127.0.0.1:7777")
if err != nil { if err != nil {
logs.Warn(err) logs.Warn(err)
@ -144,12 +147,14 @@ func TestNewMux(t *testing.T) {
func server() { func server() {
var err error var err error
l, err := net.Listen("tcp", "127.0.0.1:9999") //l, err := net.Listen("tcp", "127.0.0.1:9999")
l, err := kcp.Listen("127.0.0.1:9999")
if err != nil { if err != nil {
logs.Warn(err) logs.Warn(err)
} }
go func() { go func() {
conn1, err = l.Accept() conn1, err = l.Accept()
logs.Info("accept", conn1)
if err != nil { if err != nil {
logs.Warn(err) logs.Warn(err)
} }
@ -159,7 +164,9 @@ func server() {
func client() { func client() {
var err error var err error
conn2, err = net.Dial("tcp", "127.0.0.1:9999") //conn2, err = net.Dial("tcp", "127.0.0.1:9999")
logs.Warn("dial")
conn2, err = kcp.Dial("127.0.0.1:9999")
if err != nil { if err != nil {
logs.Warn(err) logs.Warn(err)
} }

View File

@ -4,13 +4,18 @@ package mux
import ( import (
"errors" "errors"
"github.com/xtaci/kcp-go"
"net" "net"
"os" "os"
"syscall" "syscall"
) )
func sysGetSock(fd *os.File) (bufferSize int, err error) { func sysGetSock(fd *os.File) (bufferSize int, err error) {
return syscall.GetsockoptInt(int(fd.Fd()), syscall.SOL_SOCKET, syscall.SO_RCVBUF) if fd != nil {
return syscall.GetsockoptInt(int(fd.Fd()), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
} else {
return 1400 * 320, nil
}
} }
func getConnFd(c net.Conn) (fd *os.File, err error) { func getConnFd(c net.Conn) (fd *os.File, err error) {
@ -27,6 +32,13 @@ func getConnFd(c net.Conn) (fd *os.File, err error) {
return return
} }
return return
case *kcp.UDPSession:
//fd, err = (*net.UDPConn)(unsafe.Pointer(c.(*kcp.UDPSession))).File()
//if err != nil {
// return
//}
// Todo
return
default: default:
err = errors.New("mux:unknown conn type, only tcp or kcp") err = errors.New("mux:unknown conn type, only tcp or kcp")
return return

View File

@ -4,6 +4,7 @@ package mux
import ( import (
"errors" "errors"
"github.com/xtaci/kcp-go"
"net" "net"
"os" "os"
) )
@ -11,6 +12,7 @@ import (
func sysGetSock(fd *os.File) (bufferSize int, err error) { func sysGetSock(fd *os.File) (bufferSize int, err error) {
// https://github.com/golang/sys/blob/master/windows/syscall_windows.go#L1184 // https://github.com/golang/sys/blob/master/windows/syscall_windows.go#L1184
// not support, WTF??? // not support, WTF???
// Todo
// return syscall.GetsockoptInt((syscall.Handle)(unsafe.Pointer(fd.Fd())), syscall.SOL_SOCKET, syscall.SO_RCVBUF) // return syscall.GetsockoptInt((syscall.Handle)(unsafe.Pointer(fd.Fd())), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
bufferSize = 10 * 1024 * 1024 bufferSize = 10 * 1024 * 1024
return return
@ -30,6 +32,13 @@ func getConnFd(c net.Conn) (fd *os.File, err error) {
// return // return
//} //}
return return
case *kcp.UDPSession:
//fd, err = (*net.UDPConn)(unsafe.Pointer(c.(*kcp.UDPSession))).File()
//if err != nil {
// return
//}
// Todo
return
default: default:
err = errors.New("mux:unknown conn type, only tcp or kcp") err = errors.New("mux:unknown conn type, only tcp or kcp")
return return