If I have a tcp connection conn
, how can determine whether conn.Read
will block?
My understanding is that Go's Read uses non-blocking sockets and will only block if there's no data available to read (See https://stackoverflow.com/a/36117724/4447365).
But is there any way to check if the socket has no data available?
This can be done with the POSIX read function by calling it with a count
argument of zero.
When programming in Go don't worry about it. Assume everything will block. Then put it in a goroutine so it runs asynchronously anyway.
The Go runtime handles all of the details.
Also, the issue here seems to be what you want to do. The issue was rejected: Go doesn't do that. Neither does C. And even if it did it isn't reliable. If you read down to the end there are suggested solutions involving the Linger TCP setting.