-3

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.

Ryan Burn
  • 2,126
  • 1
  • 14
  • 35
  • 2
    The fact that you want to check implies you may have a design flaw, and this is likely an XY Problem. Can you detail what you're trying to accomplish that you think you need to perform such a check? – Adrian Aug 31 '18 at 17:22
  • 1
    Not knowing anything about the context of what you're working on is exactly the problem, and is why I asked for additional details on what you are actually trying to accomplish. – Adrian Aug 31 '18 at 17:33
  • 1
    @rnickb: When writing in Go you aren't using POSIX. It'll work the same in Windows (mostly). When using Go, write Go. – Zan Lynx Aug 31 '18 at 19:38
  • https://stackoverflow.com/a/11552492/13422 – Zan Lynx Aug 31 '18 at 20:42
  • Ummm... 'you may have a design flaw' - not you do have a design flaw'. Note that you comment flirts with violating the SO CoC. – Martin James Sep 01 '18 at 10:39

1 Answers1

1

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.

Zan Lynx
  • 53,022
  • 10
  • 79
  • 131