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.

Reply via email to