Как правильно отправить строку частями через send (WinSocks)?

Рейтинг: 0Ответов: 1Опубликовано: 19.06.2011

Вопрос скорее любопытства, чем потребности в реализации. Например я отправляю через send(sock, buff, (int)strlen(buff), 0), и send вернуло значение 50, тогда как строка размером в 100 байт. Что делать? Отправить заново всю строку или оставшееся 50 байт? Я так понимаю, что сервер, получив (int)strlen(buff) знает, что строка пришла не вся, и ждет. Выходит, нужно отправить оставшееся 50 байт? А что будет если я отправлю всю заново? Запрос обработается нормально, если это к примеру HTTP? Если нормально, что станет с предыдущим запросом, истечет по таймауту?

Ответы

▲ 2Принят

Если send вернул 50, то значит надо отправить оставшиеся 50. Если вы используете TCP, то посылать всю строку заново не следует, иначе сервер получит первую половину дважды.