Буфер приема Netlink Python LinuxPython

Программы на Python
Ответить
Anonymous
 Буфер приема Netlink Python Linux

Сообщение Anonymous »

Когда я создаю попытку выполнения socket.recv() из сокета NETLINK_ROUTE, и если я не получаю ВСЕ доступные данные, кажется, что данные, которые не были получены, теряются.

Например:

Код: Выделить всё

>>> import socket
>>> sock = socket.socket(socket.AF_NETLINK, socket.SOCK_DGRAM, socket.NETLINK_ROUTE)
>>> sock.bind((0,0))
>>> sock.send('\24\0\0\0\22\0\1\3\23\0364O\0\0\0\0\21\0\0\0') # struct nlmsghdr
20
>>> sock.recv(10000)
'\xe4\x03\x00\x00 ... ' (+3000 more bytes)
Если я использую sock.recv(100), он вернет 100 байт, но остальные +2900 байтов исчезнут. Выполнение другого sock.recv() вернет следующий nlmsghdr (если сообщение состоит из нескольких частей) или заблокирует ожидание данных.

Я могу sock.recv( X, socket.MSG_PEEK) для чтения X байтов без потери данных; но при этом прочитанные данные, конечно, не извлекаются из буфера приема.

Я думал, что любые непрочитанные данные останутся в буфере до тех пор, пока не будут прочитаны. Что я делаю неправильно? Я бы предпочел не просто гадать, сколько данных может быть доступно...

Подробнее здесь: https://stackoverflow.com/questions/921 ... ecv-buffer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»