| 614 | nonblocking_socket = True |
| 615 | |
| 616 | def __init__(self, obj): |
| 617 | # type: (_PacketIterable) -> None |
| 618 | if not obj: |
| 619 | self.iter = iter([]) # type: Iterator[Packet] |
| 620 | elif isinstance(obj, IterSocket): |
| 621 | self.iter = obj.iter |
| 622 | elif isinstance(obj, SndRcvList): |
| 623 | def _iter(obj=cast(SndRcvList, obj)): |
| 624 | # type: (SndRcvList) -> Iterator[Packet] |
| 625 | for s, r in obj: |
| 626 | if s.sent_time: |
| 627 | s.time = s.sent_time |
| 628 | yield s |
| 629 | yield r |
| 630 | self.iter = _iter() |
| 631 | elif isinstance(obj, (list, PacketList)): |
| 632 | if isinstance(obj[0], bytes): |
| 633 | self.iter = iter(obj) |
| 634 | else: |
| 635 | self.iter = (y for x in obj for y in x) |
| 636 | else: |
| 637 | self.iter = obj.__iter__() |
| 638 | |
| 639 | @staticmethod |
| 640 | def select(sockets, remain=None): |