TCP processes data as a byte stream�� while UDP views them as records��.
In byte streams, there is buffering�� of data, both in transmission and receiving.
We can flush�� (or, push�� in TCP terminology) the buffer. There is a tradeoff between throughput and realtime responses in using flush mechanism: this is because every message has a fixed overhead.
There is also the notion of out-of-band data�� (or, urgent data�� in TCP terminology). For example, when a user types control-C or DELETE in an interactive application.
In TCP, there is a special out-of-band data buffer, both in the sending and receiving protocols. This buffer takes precedence over the usual data.
We need some way of informing the process that some out-of-band data arrives - this is done using SIGNALs in UNIX.
NOTE: there is no bound on the size of out-of-band buffers, but some implementation do not guarantee more than 1 byte of such data!
UDP does not provide buffers or out-of-band communication.