I’m pretty sure you only get another NSStreamEventHasBytesAvailable event once you have processed all the data from the last event.
Eli (resent to list, accidentally only replied to Jens) > On Feb 9, 2017, at 3:27 PM, Jens Alfke <j...@mooseyard.com> wrote: > > I’m testing some macOS code that’s doing TCP socket I/O with NSStreams. > Occasionally (about one in ten runs) it’ll get stuck: no deadlocks or blocked > threads or anything, it’s just completely idle even though the peer is still > trying to send data. (The peer also gets stuck because its socket’s write > buffer fills up.) > > It looks like what’s happening is that my delegate object isn’t getting an > NSStreamEventHasBytesAvailable event from the stream, even though there’s > data to read. I’ve added logging when this event is received, and also at the > point where I actually read from the stream, so I can tell that every > byte-available event is followed by a read. (I know that if the read call > doesn’t happen, the stream won’t send another event.) I’ve also located the > NSInputStream instance and checked its hasBytesAvailable property in the > debugger — it’s YES. > > I’m not sure how this can happen. My understanding is that when I receive the > bytes-available event I should read bytes from the stream, and even if I > don’t read all the available bytes, I’ll get another event. Correct? The code > was reading a max of 4kb from the stream; as an experiment I raised this to > 16kb and I can’t get the bug to occur again. But I may just have made it less > likely. > > —Jens > > PS: This is on macOS 10.12.4 Beta 1 (16E144f). _______________________________________________ Do not post admin requests to the list. They will be ignored. Macnetworkprog mailing list (Macnetworkprog@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/macnetworkprog/archive%40mail-archive.com This email sent to arch...@mail-archive.com