Документирование возможных ошибок TCP / непредсказуемого поведения
Некоторое время назад я начал работать с заказными серверами, и, хотя у меня есть опыт работы с реальным обменом сообщениями / сериализацией и т. Д. Взаимодействия клиент-сервер, я никогда не кодировал реальный сервер с нуля., В этом смысле я обнаружил, что необработанные соединения с сокетом TCP намного сложнее и непредсказуемее, чем хотелось бы.
Например, я написал простое клиент-серверное приложение, которое установит долгоживущее TCP-соединение, и клиенты получат push-уведомления от сервера. Очень просто, он работал очень хорошо в моей тестовой среде, даже на многих компьютерах.
Однако, когда я действительно опубликовал это, у меня было много ошибок, которые позже я обнаружил, что это было отсутствие сигналов поддержки активности, которые делали бы соединение разрывным, не давая мне (ни клиенту, ни серверу) никакой обратной связи / ошибка вообще. Сообщения просто не будут доставлены и молча провалится.
Я знал, что TCP может разорвать соединение, но я думал, что, по крайней мере, мог получить ошибку или что-то подобное, чтобы я мог восстановить соединение в случае потери соединения. Это сделало меня очень неуверенным в том, что я могу развернуть свои собственные серверы, поскольку возможные ошибки и сценарии кажутся слишком многочисленными и неожиданными, и я действительно не хочу узнавать о неожиданных действиях при развертывании реального приложения. Учитывая мой текущий опыт программирования на стороне сервера, лучший способ справиться с ошибками - перечислить все возможные ошибки и убедиться, что при написании программы я рассмотрел все исключительные случаи.
Итак, есть ли где-нибудь, где я мог бы найти хорошую документацию о возможных ловушках / исключениях, которые я мог бы найти с сокетами, как их обнаружить? Прошло некоторое время с тех пор, как я последний раз работал с этим, поэтому у меня нет больше свежих примеров, но я помню, что, например, когда вы получаете пустое сообщение, это будет означать, что соединение разорвано.
Я также хотел бы услышать предложения или, может быть, простые библиотеки (желательно на C), которые их покрывают, чтобы я мог основывать на этом свою работу? Моя основная платформа - Linux, но кроссплатформенное решение очень ценится!
Спасибо!