Здравствуйте, critter, Вы писали:
C>Насколько я понимаю в TCP/IP встроен механизм отбрасывания дублированых пакетов, т.е. имеем ситуацию:
C>1) клиент отправил пакет на сервер C>2) сервер получил пакет C>3) сервер отправил клиенту подтверждение на пакет, но подтверждение не дошло C>4) клиент отправил тот же пакет на сервер еще раз
C>Пакет будет отброшен. Я правильно понимаю?
Слово "пакет" здесь неуместно. Здесь Вам не UDP и даже не SCTP (как реализация seqpacket).
Пакеты действительно есть. Но не на TCP. А на IP уровне. TCP payload сообщает "передаю данные начиная с позиции X". И если придёт снова такое же, а приёмная сторона ждёт уже позицию X+N, то данные из того пакета не будут отданы в программу. Но это не "отброшен", могут быть другие действия (например, перепосылка ACK).
C>Просто имею какую то необъяснимую ситуацию. Такое впечатление что пакет все таки приходит дважды. С задержкой примерно в 0.3-0.4 сек. Возможно ли что при каких либо обстоятельствах TCP/IP пакет придет дважды?
Как Вы это определили? Одни и те же данные в потоке видите дважды? Или что-то иное?
C>Поможет ли введение своей нумерации пакетов?
Нет. Поможет — понять, чем передача _потока_ (как в TCP и вообще как в SOCK_STREAM) отличается от передачи _пакетов_ (как в SOCK_DGRAM или SOCK_SEQPACKET), хотя тут термин "пакет" таки крив.
C> Думается что раз такая нумерация уже есть в TCP то введение своей ситуацию не исправит... Или можно уверенно сказать что дублирования пакетов быть не может потому что не может быть никогда и идти править руки? :)
Давайте Вы не будете пытаться строить догадки на основании неверного понимания, а просто расскажете детали проблем. Итак — почему Вы предполагаете "повторение пакетов"?