kcp-go icon indicating copy to clipboard operation
kcp-go copied to clipboard

listener.Accept() runs only after a byte is received

Open vikulin opened this issue 2 years ago • 1 comments

listener.Accept() runs only after a byte is received: but expected to run it after kcp.Dial.

The test code:

package main

import (
	"log"
	"time"
	kcp "github.com/xtaci/kcp-go/v5"
)

func main() {

	// start the server

	ln, err := kcp.Listen("127.0.0.1:48000")
	log.Println("Listening KCP...")
	if err != nil {
		panic(err)
	}
	// run the client
	go client()
	/**
	Listening for a connection
	**/
	_, err = ln.Accept()
	if err != nil {
		panic(err)
	} else {
		log.Println("OK.")
	}
}

func client() {

	// wait for server to become ready
	time.Sleep(time.Second)

	// dial to the echo server
	if sess, err := kcp.Dial("127.0.0.1:48000"); err == nil {
		// wait for data write
		time.Sleep(time.Second)
		data := "."
		log.Println("sent:", data[:1])
		if _, err := sess.Write([]byte(data[:1])); err != nil {
			log.Fatal(err)				
		}
	} else {
		log.Fatal(err)
	}
}

Output:

$ go run examples/main.go
2022/06/04 12:36:33 Listening KCP...
2022/06/04 12:36:35 sent: .
2022/06/04 12:36:35 OK.

Expected "OK." to follow right after "Listening KCP..."

vikulin avatar Jun 04 '22 09:06 vikulin

Test code for TCP:

package main

import (
	"net"
	"log"
	"time"
	//kcp "github.com/xtaci/kcp-go/v5"
)

func main() {

	// start the server

	ln, err := net.Listen("tcp", "127.0.0.1:48000")
	log.Println("Listening KCP...")
	if err != nil {
		panic(err)
	}
	// run the client
	go client()
	/**
	Listening for a connection
	**/
	_, err = ln.Accept()
	if err != nil {
		panic(err)
	} else {
		log.Println("OK.")
	}
}

func client() {

	// wait for server to become ready
	time.Sleep(time.Second)

	// dial to the echo server
	if sess, err := net.Dial("tcp", "127.0.0.1:48000"); err == nil {
		// wait for data write
		time.Sleep(time.Second)
		data := "."
		log.Println("sent:", data[:1])
		if _, err := sess.Write([]byte(data[:1])); err != nil {
			log.Fatal(err)				
		}
	} else {
		log.Fatal(err)
	}
}

Output:

$ go run examples/main.go
2022/06/04 12:39:52 Listening KCP...
2022/06/04 12:39:53 OK.

vikulin avatar Jun 04 '22 09:06 vikulin