| 2862 | self.write_packet(p) |
| 2863 | |
| 2864 | def write_packet(self, pkt): # type: ignore |
| 2865 | # type: (Packet) -> None |
| 2866 | |
| 2867 | if hasattr(pkt, "time"): |
| 2868 | sec = int(pkt.time) |
| 2869 | usec = int((int(round((pkt.time - sec) * 10**9)) << 32) / 10**9) |
| 2870 | t = (sec << 32) + usec |
| 2871 | else: |
| 2872 | t = int(time.time()) << 32 |
| 2873 | |
| 2874 | # There are 16 bytes of headers + 2 bytes of padding before the packets |
| 2875 | # payload. |
| 2876 | rlen = len(pkt) + 18 |
| 2877 | |
| 2878 | if hasattr(pkt, "wirelen"): |
| 2879 | wirelen = pkt.wirelen |
| 2880 | if wirelen is None: |
| 2881 | wirelen = rlen |
| 2882 | |
| 2883 | self.f.write(struct.pack("<Q", t)) |
| 2884 | self.f.write(struct.pack(">BBHHHH", 2, 0, rlen, 0, wirelen, 0)) |
| 2885 | self.f.write(bytes(pkt)) |
| 2886 | self.f.flush() |
| 2887 | |
| 2888 | def close(self): |
| 2889 | # type: () -> Optional[Any] |