-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Client hangs for a minute at first. #20
Comments
according to the documentation for io.Reader
This library does not follow that convention. It appears to block until it is able to fill the buffer. This program demonstrates the issuepackage main
import (
"fmt"
"io"
"log"
"net"
"time"
"github.com/reiver/go-telnet"
)
// start a TCP server that
// - prints "hello world"
// - waits 60 seconds
// - then hangs up
func DemoServer() {
listener, err := net.Listen("tcp", ":1111")
if err != nil {
panic(err)
}
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
panic(err)
}
conn.Write([]byte("hello world\n"))
time.Sleep(10 * time.Second)
conn.Close()
}
}
// ConnectWithBufferSize connects to the server at the given address and
// and prints the output of each call to Read() using the given buffer size.
func ConnectWithBufferSize(bufferSize int) {
telnetClient, err := telnet.DialTo("localhost:1111")
if err != nil {
panic(err)
}
defer telnetClient.Close()
buff := make([]byte, bufferSize)
for {
n, err := telnetClient.Read(buff)
log.Printf("EOF:%t> %#v\n", err == io.EOF, string(buff[:n]))
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
}
}
func main() {
go DemoServer()
fmt.Println("=== Buffer Size 7 ===")
ConnectWithBufferSize(7)
fmt.Println("=== Buffer Size 1 ===")
ConnectWithBufferSize(1)
} Output:
Note that with a buffer size of 7 you immediately get As a work around, you can use a buffer size of 1 I am not able to re-produce the behavior OP describes where the connection ever becomes interactive. I have confirmed that this is fixed by either of PR #22 or PR #9. |
My telnet client is connecting to a non-go-telnet server and uses the basic client code provided in the documentation example. Connecting to my server with a standard telnet client gets an instant reply, but for some reason, my go-telnet client hangs reading for exactly a minute, then is fully interactive. Is there some configuration I should be using or something extra I should be doing with the Conn to flush it?
The text was updated successfully, but these errors were encountered: