Hey everyone!

This question cropped up while testing. It's 2 related questions:

*1. Why am I able to write to without accepting a connection?*

  addr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:0")
  if err != nil {
    t.Fatal(err)
  }

  ln, err := net.ListenTCP("tcp", addr)
  if err != nil {
    t.Fatal(err)
  }
  defer ln.Close()

  raddr, err := net.ResolveTCPAddr("tcp", ln.Addr().String())
  if err != nil {
    t.Fatal(err)
  }

  client, e := net.DialTCP("tcp", nil, raddr)
  if e != nil {
    t.Fatal(e)
  }

  if n, e := client.Write([]byte("hi world!")); e != nil {
    fmt.Printf("error writing %s\n", e)
  } else {
    fmt.Printf("wrote %d bytes\n", n)
  }

This will come back as: "wrote 9 bytes"
- https://play.golang.org/p/HmiRu-9xEv

*2. How would I only allow it to write what it's able to read? In this 
example, the server connection only reads 1 byte before closing. This would 
be useful for testing flaky connections and retry logic:*

addr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:0")
if err != nil {
  t.Fatal(err)
}

ln, err := net.ListenTCP("tcp", addr)
if err != nil {
  t.Fatal(err)
}
defer ln.Close()

// mock server
go func() {
  for {
    s, e := ln.AcceptTCP()
    if e != nil {
      t.Fatal(e)
    }

    buf := make([]byte, 1)
    if n, e := s.Read(buf); e != nil {
      t.Fatal(e)
    } else {
      fmt.Printf("read %d bytes\n", n)
    }

// close before reading everything
    s.Close()
  }
}()

// make the connection to our little server
raddr, err := net.ResolveTCPAddr("tcp", ln.Addr().String())
if err != nil {
  t.Fatal(err)
}

client, e := net.DialTCP("tcp", nil, raddr)
if e != nil {
  t.Fatal(e)
}

if n, e := client.Write([]byte("hi world!")); e != nil {
  fmt.Printf("error writing %s\n", e)
} else {
  fmt.Printf("wrote %d bytes\n", n)
}

This will come back as: "wrote 9 bytes", "read 1 bytes"
- https://play.golang.org/p/-T2UunLy5T

Thanks for the help in advance!

Matt

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to