Почему нет 64-битного API для winsock? - PullRequest
3 голосов
/ 30 марта 2020

Вызовы, такие как send() и sendto() в Winsock API, принимают примитив int для определения размера их параметров буфера. Это, очевидно, накладывает 32-битное ограничение на максимальный размер буфера, который может быть отправлен.

Почему это так? Существует ли 64-битный Winsock2 API, который может использовать более подходящий тип размера (например, size_t)?

При Linux аналогичные вызовы используют тип size_t для определения размеров.

1 Ответ

2 голосов
/ 30 марта 2020

Нет необходимости в функции с большим размером, на самом деле тип может быть коротким, и все же это не будет проблемой.

Сокеты не отправляют сообщения, они просто передают байты. Когда вы вызываете send (), данные не могут быть получены за один раз при вызове recv (). Вы должны иметь logi c при получении байтов, чтобы узнать, все ли у вас получилось, и еще раз вызвать recv (), если нет. Итак, если вы хотите отправить что-то большее, чем можно поместить в int? Просто сделайте несколько звонков для отправки (). Если ваш код recv () не может с этим справиться, это ошибка, потому что он должен.

...