Сейчас у меня есть коммуникационная инфраструктура, состоящая из клиента и сервера.
Клиент подключается к серверу, используя стандартные сокеты TCP.
У меня есть структура сообщения, которая выглядит следующим образом:
4 bytes -- Message size
n bytes -- Message
4 bytes -- CRC32 checksum
Одним из требований является то, что для того, чтобы сообщение было действительным, оно должно пройти проверку CRC32 на другом конце соединения, клиент или сервер обрабатывают сообщения одинаково.
Если сообщение не проходит проверку CRC32, соединение разрывается и устанавливается новое соединение.
Мой вопрос: почему, черт возьми, я получаю сбои CRC32 случайным образом?
Без видимой причины, даже когда клиент и сервер на одном компьютере используют петлевой адрес (127.0.0.1).
Я думал, что даже если я запрограммировал отказоустойчивость на случай злонамеренной третьей стороны или чего-то еще, я никогда не увижу разрыва соединения во время моих тестов.
recv
всегда возвращает точную требуемую длину данных, аналогичную дляsend
), либо ошибка в вашем коде, проверяющем/создающем CRC. публикация некоторого кода будет иметь большое значение для прояснения этого и поможет нам помочь вам. - person Hasturkun   schedule 07.07.2011