That option requires proprietary protocols not standard tcp/udp. > On Dec 30, 2019, at 12:04 PM, Bruno Albuquerque <b...@gmail.com> wrote: > > > But, to complicate things, you can create what is basically a TCp connection > with packet boundaries using SOCK_SEQPACKET (as opposed to SOCK_STREAM or > SOCK_DGRAM). > >> On Mon, Dec 30, 2019 at 9:04 AM Jake Montgomery <jake6...@gmail.com> wrote: >> It sounds like maybe you have some misconceptions about TCP. It is a stream >> protocol, there are no data boundaries that are preserved. If send 20 bytes >> via TCP in a single call, it is likely that those 20 will arrive together at >> the client. But it is NOT guaranteed. It is perfectly legitimate for 10 >> bytes to arrive first, then the next 10 sometime later. Obviously this is >> unlikely with only a few bytes, but becomes more likely as the size of the >> Write grows. Until the connection is closed, you never know if there is more >> data coming. So it may seem that there is a 1:1 correlation between >> conn.Write() and conn.Read(), but you can not count on it. >> >> To answer you specific question, conn.Read() will return when it has filled >> up the buffer provided, or there is no more data ready to be read at that >> moment. ReadAll() will wait until EOF. Given that TCP is a stream, as I >> described above, it is still unclear what you hope to have happen without >> knowing more about the specific data being transmitted, and what you wan to >> do with it on the client side. >> >> >> >> >>> On Sunday, December 29, 2019 at 10:20:39 AM UTC-5, Ron Wahler wrote: >>> Jake, >>> >>> Thanks for the reply. Csrc.Read is what I was referring to as the >>> connection standard read, should not have used the words "standard read" >>> sorry about that. The problem I am trying to solve is reading an unknown >>> amount of byte data. I am trying to understand what triggers the >>> Csrc.Read(buf) to return when I send say 3 bytes to it with a client, I >>> also keep the connection open and send a few bytes of characters with the >>> netcat tool, the Csrc.Read returns, but the snip it below that with ReadAll >>> does not return. I am trying to understand the underlying behavior of what >>> triggers a return with the data in these two calls ? >>> >>> on this read : >>> >>> Csrc net.Conn >>> >>> >>> buf := make([]byte, 1024*32) >>> >>> // READ FROM CLIENT >>> >>> nBytes, err := Csrc.Read(buf) >>> >>> >>> >>> Csrc.Read(buf) returns with a few bytes that I send to it. It does not >>> wait for the entire allocated buf size to return. This works great, but I >>> am looking for a way to not preallocate a large buffer. >>> >>> >>> >>> I am prototyping with ReadAll, see the following snip it, but when I send a >>> few bytes to this call with a client, it does not return. The documentation >>> is saying it may be looking for an EOF which I do not send. >>> >>> >>> >>> buf, read_err := ioutil.ReadAll(Csrc) >>> >>> >>> >>> >>> >>> thanks, >>> >>> Ron >>> >>> >>> >>> >>> >>> >>>> On Friday, December 27, 2019 at 5:11:42 PM UTC-7, Ron Wahler wrote: >>>> I am looking for a net.conn standard read that would return a data buffer >>>> the exact size of the read. I am trying to read an unknown amount of byte >>>> data from the connection. With the read i am using I am required to >>>> pre-allocate a buffer and pass that buffer to the read. I am looking for a >>>> read that works more like the ReadString , but is for a byte slice. >>>> >>>> // I want something similar to this read that returns the read string into >>>> the message string. >>>> message, err := bufio.NewReader(ServerConn).ReadString('\n') >>>> >>>> if ( err != nil ){ >>>> >>>> fmt.Println("RELAY: ERROR: Reg Message read >>>> err:", err) >>>> >>>> return >>>> >>>> } >>>> >>>> >>>> >>>> >>>> >>>> // had to preallocate a buffer, but I want a read to return me a buffer so >>>> I don't have to guess how big to make it. >>>> >>>> buf := make([]byte, 1024*32) >>>> >>>> // READ FROM CLIENT >>>> >>>> nBytes, err := Csrc.Read(buf) >>>> >>>> >>>> >>>> >>>> >>>> Is this not possible, I have not seen any examples that would indicate >>>> that there is a standard library that would do something like what I am >>>> looking for. >>>> >>>> >>>> >>>> thanks, >>>> >>>> Ron >>>> >> >> -- >> 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. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/7e468329-2488-460c-9419-b4c55857b1eb%40googlegroups.com. > > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAEd86TxqRRML-HDe7H8vESCTBOhBV3c%3DfY0gamEZrrb6XKgfzA%40mail.gmail.com.
-- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/18B10B81-7E60-468D-8BDC-6C65B9884473%40ix.netcom.com.