Длина запроса OpenSSL - как рассчитать размер? - PullRequest
1 голос
/ 21 марта 2011

Я пытаюсь реализовать клиент SSL в C. В соответствии с примерами, приведенными здесь (вы можете увидеть исходный код непосредственно здесь ), "request_len" ввода должен быть отправляется на сервер SSL рассчитывается как -

request_len=strlen(REQUEST_TEMPLATE)+ strlen(host)+6; 

Может кто-нибудь сказать, почему в длину добавляется "6"?

1 Ответ

3 голосов
/ 21 марта 2011

Это место для номера порта и нулевого терминатора. Порт находится в диапазоне 0-65535, так что это до 5 символов. И строка должна заканчиваться 1-символьным нулевым терминатором. Так что 5 + 1 = 6.

Чтобы понять это, вы должны посмотреть, где они заполняют запрос. Я разложил это так, чтобы вы могли видеть, как выстраиваются аргументы. Внутри REQUEST_TEMPLATE находится %s, который заменяется хостом, и %d, который заменяется портом.

request_len =          strlen(REQUEST_TEMPLATE) + strlen(host) + 6;
...                                  |                    |      |
snprintf(request,request_len, REQUEST_TEMPLATE,          host,   port);  

Информация о бонусе:

Затем они выполняют еще одну проверку, чтобы выяснить, насколько велик запрос, потому что порт мог содержать менее 5 символов.

request_len=strlen(request);  /* inefficient */

В strlen нет необходимости, поскольку snprintf () возвращает длину построенной строки.

request_len = snprintf(request, request_len, REQUEST_TEMPLATE, host, port); /* efficient */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...