Документирование TCP возможных ошибок / непредсказуемого поведения - PullRequest
0 голосов
/ 20 августа 2011

Некоторое время назад я начал работать с заказными серверами, и хотя у меня есть опыт работы с реальным обменом сообщениями / сериализацией и т. Д., Связью клиент / сервер, я никогда не кодировал реальный сервер с нуля. В этом смысле я обнаружил, что необработанные соединения с сокетом TCP намного сложнее и непредсказуемее, чем хотелось бы.

Например, я написал простое клиент-серверное приложение, которое установит долгоживущее TCP-соединение, и клиенты получат push-уведомления от сервера. Очень просто, он очень хорошо работал в моей тестовой среде, даже на многих компьютерах.

Однако, когда я действительно опубликовал это, у меня было много ошибок, которые позже я обнаружил, что это было отсутствие сигналов поддержки активности, которые делали бы соединение разрывным, , не давая мне (либо клиент или сервер) любая обратная связь / ошибка вообще . Сообщения просто не будут доставлены и молча провалится.

Я знал, что TCP может разорвать соединение, но я думал, что, по крайней мере, мог получить ошибку или что-то подобное, чтобы я мог восстановить соединение в случае потери соединения. Это сделало меня очень неуверенным в том, что я могу развернуть свои собственные серверы, поскольку возможные ошибки и сценарии кажутся слишком многочисленными и неожиданными, и я действительно не хочу узнавать о неожиданных действиях при развертывании реального приложения. Учитывая мой текущий опыт программирования на стороне сервера, лучший способ справиться с ошибками - перечислить все возможные ошибки и убедиться, что я рассмотрел все исключительные случаи при написании программы.

Итак, где я мог найти хорошую документацию о возможных ловушках / исключениях, которые я мог бы найти с сокетами, и о том, как их обнаружить? Прошло некоторое время с тех пор, как я в последний раз работал с этим, поэтому у меня нет больше свежих примеров, но я помню это, например. когда вы получите пустое сообщение, это будет означать, что соединение разорвано.

Я также хотел бы услышать предложения или, может быть, простые библиотеки (желательно на C), которые их покрывают, чтобы я мог основывать на этом свою работу? Моя основная платформа - Linux, но кроссплатформенное решение очень ценится!

Спасибо!

...