1) устойчивость к ошибкам - это не твоя задача это делает за тебя TCP/IP драйвер.
2) Устойчивость к сбоям типа данне потерялись, то тут банальная проверка длинны пакеты (если ты передаеш его)
А еще лучше делать по другому(для устойчивости)
СИГНАТУРА_1 + ДЛИННА ПАКЕТА + ДАННЫЕ + СИГНАТУРА_2
И тогда все данные которые непроходят проверку на сигнатуру или длинну сразу отбрасываются как ошибочные.
3) разрыв соединения - ну разорвалось, ну и что с этого? Если ты ждал данные через recv то получиш 0 в ответ. И там дальше уже по обстоятельствам решиш.
Так что всё дело даже не в сетевой реализации, а в протоколе который будет использоваться.