It just doesn't know. You'll have to choose a reasonable value. The difference is that the tcp code would just send the message; without trying to guess what the application needs. For example, your shell may be happy using `line buffering' instead of the probably big buffer your cat would use instead. A debugger may use no buffer at all.