I’m working on exchanging data between 2 processes using unix SOCK_SEQPACKET which have the nice property to never transfers parts of more than one packet at the same time.
The packet that I’m transmitting are not of a fixed size, so I’m trying to find a way to read the entire message. All the reading method on net.Conn or net.PacketConn take a fixed size byte buffer. Which means when I read the packet its possible that my buffer will be too small and therefore I will not get the full message.
I tried using io.Copy, bufio.Reader, ioutil.ReadAll but they all only return when the connection is closed with all messages at once, which is not what I want. I’m running out of ideas (despite using a gigantic byte array which seems stupid). Anyone knows if it’s possible and how to do that?
I might have misunderstood what you were asking, but before what I was suggesting was reading into a bytes.Buffer in a loop with io.CopyN and reading a specific amount of bytes at a time.
Are you trying to accomplish something like the following?
If that socket is similar to a UDP socket, it does indeed deliver one packet per read() call. You need to provide a buffer large enough to hold the entire packet, or it will be truncated. The buffer doesn’t need to be gigantic - only as large as the largest packet you expect to receive. (For UDP this is nearly limited by the maximum size of a datagram; for your socket type I’m not sure.)