What do you mean when you say 16 "does perform IO?"
It's dealing with the receive buffer, which is a buffer located on the receiving device. If you flush this local buffer, the connected device doesn't do anything. If this was a *send* buffer, then you could have two different behaviors- you could either flush it by discarding, or flush it by sending it to the device. With a receive buffer, either the device has sent you something already or it has not- it has nothing to do with the receive buffer.
I'm pretty sure they're both the same.