Как очистить приемный буфер в WinSock - PullRequest
1 голос
/ 23 сентября 2010

Я пошел искать это и нашел по крайней мере одного человека, который спросил, но не получил ответа. Я думаю, что необходимо запустить сегмент отправки и получения (часть более крупного процесса в том же соединении сокетов) и ожидать, что в буфере приема уже ничего нет.

Я не видел ответа, но подумал об этом клудже, прежде чем сам понял другой способ, который казался чище (читай "заканчивается на" в следующем сегменте). Просто установите RecieveTimeout на 1 или, если вы считаете, что отправитель все еще находится в процессе отправки, немного большее значение. Затем просто вызовите Receive с socketflags = 0 и отбросьте результаты.

У кого-нибудь есть лучший способ?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2010

Я думал, что сделал в то время, но потом просто прочитал и кэшировал результаты, а затем вместо этого удалил из кэша. Я ищу различные последовательности результатов (строки), которые появляются при отправке команды. Следующая отправленная команда не может предполагать, что в приемном буфере больше нет символов, поскольку протокол "стандарт" указывает, что ответ может заканчиваться CR или LF или CRLF или LFCR или ничем. Этот протокол реализуется по-разному в разных организациях, поскольку он очень слабо определен.

0 голосов
/ 23 сентября 2010

Каково происхождение этого требования?Вам действительно нужно выбросить данные?

...