Ответ 1
В предстоящем Python 3.3, теперь в альфа-тестировании. См. socket.sendmsg
.
В POSIX C мы можем использовать writev
для записи сразу нескольких массивов в дескриптор файла. Это полезно, когда вам приходится конкатенировать несколько буферов, чтобы сформировать одно сообщение для отправки через сокет (например, заголовок и тело HTTP). Таким образом, мне не нужно дважды вызывать send
, один раз для заголовка и один раз для тела (что предотвращает разделение сообщений в разных кадрах на проводе), и мне не нужно конкатенировать буферы перед отправкой.
Мой вопрос в том, есть ли эквивалент Python?
В предстоящем Python 3.3, теперь в альфа-тестировании. См. socket.sendmsg
.
Python поддерживает os.writev()
, а также sendmsg()
. Эти функции являются атомарными, поэтому эквивалент вызовов write()
и send()
соответственно с конкатенированным буфером.
Существует TCP_CORK
. Вы можете сказать, что ядро не посылает частичные кадры до тех пор, пока они не будут закодированы.
Используя любой из этих методов, вы можете иметь контроль над частичными кадрами TCP.