New submission from Sworddragon: If I'm receiving data from a socket (several bytes) and making the first call to socket.recv(1) all is fine but the second call won't get any further data. But doing this again with socket.recv(2) instead will successfully get the 2 bytes. Here is a testcase:
Script: def icmp_packet(type, code, data): length_data = len(data) if length_data % 2 == 1: data += b'\x00' checksum = code | type << 8 i = 0 while i < length_data: checksum += data[i + 1] | data[i] << 8 checksum = (checksum & 65535) + (checksum >> 16) i += 2 return bytes([type]) + bytes([code]) + (checksum ^ 65535).to_bytes(2, 'big') + data import socket connection = socket.socket(proto = socket.IPPROTO_ICMP, type = socket.SOCK_RAW) connection.settimeout(1) connection.sendto(icmp_packet(8, 0, b'\x00\x00\x00\x00'), ('8.8.8.8', 0)) print(connection.recv(2)) connection.close() connection = socket.socket(proto = socket.IPPROTO_ICMP, type = socket.SOCK_RAW) connection.settimeout(1) connection.sendto(icmp_packet(8, 0, b'\x00\x00\x00\x00'), ('8.8.8.8', 0)) print(connection.recv(1)) print(connection.recv(1)) connection.close() Here is the result: root@ubuntu:/home/sworddragon/tmp# python3 test.py b'E\x00' b'E' Traceback (most recent call last): File "test.py", line 24, in <module> print(connection.recv(1)) socket.timeout: timed out ---------- components: Library (Lib) messages: 221155 nosy: Sworddragon priority: normal severity: normal status: open title: Remaining buffer from socket isn't available anymore after calling socket.recv the first time type: behavior versions: Python 3.4 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue21819> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com