Und ich vermute den wenigsten bekannt, aber eine logische Folgerung aus der reliability Forderung. Mit dem gleichen Ansatz kann man glaube ich aber auch bei UDP für schwachfug sorgen, wenn auch nicht zur Totalblockierung. Denn irgendwo müssen die Daten ja gespeichert werden und bei UDP übernehmen das meist irgendwelche programmeigenen Container; keine Empfangsbestätigung -> kein leeren der Container -> bei geeigneter Stimulierung des Servers läuft sein Speicher voll und es knallt.
Die Lösung des Problems ist aber denkbar einfach: Einführung einer maximal tolerierten Pufferobergrenze. In TCP ist das einfache eine Kombination aus non-blocking und SO_SNDBUF. Sollten die Puffer dann jemals volllaufen quitiert send den Aufruf mit einem Fehler und man kann den Client ins Nirvana jagen. Beim recv Aufruf kann man dann entweder das "wouldblock" Ereignis abfangen oder recv einfach mit select kombinieren um vorher zu testen ob es was zum lesen gibt.
Nebenbei empfehle ich je nach Anwendungfall von TCP auch auf den TCP_NODELAY Flag zu achen um ggf das nagle-ack-delay Problem zu umgehen.