Обратите внимание, что этот вопрос специально предназначен для языка Ada и API "g-socket" Ады
Я открыл Socket локально и слушаюдля входящих соединений. Соединения принимаются, и я могу установить несколько согласованную передачу данных по соединению, читая и записывая объект Stream, подключенный к удаленному сокету.
Вопрос:
КогдаПоток подключен к сокету TCP, каждый ли вызов процедуры обобщенного потока 'Write
вызывает немедленную отправку пакета?
Пример A:
-- two separate `'Write` calls always seems to generate two packets of 1 byte each
U8'Write (Comms, Number_Of_Security_Types);
U8'Write (Comms, Security_Type_None);
Пример B:
-- One `'Write` call that happens to send the same data formatted as a 16 bit value is sent as a single packet.
U16'Write (Comms,
(U16 (Number_Of_Security_Types) * 16#100#) +
U16 (Security_Type_None)
);
Пример C:
-- This is a complex record with a further record nested within it.
-- its `'Write` callback is implemented as a series of many sequential `Integer'Write` calls...
Server_Init'Write (Comms, Server_Init_Rec);
Примеры A и C приводят к тому, что Wireshark обнаруживает искаженные пакеты, но в примере B создается хорошо сформированный пакет без проблем.
Такое поведение кажется детерминированным, но я не могу найти никакой последовательной документации относительно 'Write
-> Stream -> Socket расположения относительно того, как и когда отправляются пакеты.