コード例 #1
0
ファイル: connection.py プロジェクト: Astron/astron.libpython
 def poll_datagram(self):
     """Reads a datagram from the socket and returns it. If a
     datagram can't be read completely, it's readable data will
     be cached and None will be returned. If the connection has
     been closed, EOFError will be raised."""
     self.read()
     # Did we just finish reading the message length?
     if (not self.reading_message) and (self.remaining_length == 0):
         length = struct.unpack('<H', self.partial_data)[0]
         self.partial_data = ''
         self.remaining_length = length
         self.reading_message = True
         self.read()
     # If either the initial read or the read at the end of the
     # block above finished reading a message body, then this
     # happens:
     if self.reading_message and (self.remaining_length == 0):
         dg = Datagram()
         dg.add_data(self.partial_data)
         self.partial_data = ''
         self.remaining_length = DATAGRAM_HEADER_SIZE
         self.reading_message = False
         return dg
     # So we did not actually finish reading a message at all. :(
     return
コード例 #2
0
 def poll_datagram(self):
     """Reads a datagram from the socket and returns it. If a
     datagram can't be read completely, it's readable data will
     be cached and None will be returned. If the connection has
     been closed, EOFError will be raised."""
     self.read()
     # Did we just finish reading the message length?
     if (not self.reading_message) and (self.remaining_length == 0):
         length = struct.unpack('<H', self.partial_data)[0]
         self.partial_data = ''
         self.remaining_length = length
         self.reading_message = True
         self.read()
     # If either the initial read or the read at the end of the
     # block above finished reading a message body, then this
     # happens:
     if self.reading_message and (self.remaining_length == 0):
         dg = Datagram()
         dg.add_data(self.partial_data)
         self.partial_data = ''
         self.remaining_length = DATAGRAM_HEADER_SIZE
         self.reading_message = False
         return dg
     # So we did not actually finish reading a message at all. :(
     return
コード例 #3
0
 def recv_datagram(self):
     """Wait for the next datagram and return it."""
     length = struct.unpack('<H', self._read(2))[0]
     data = self._read(length)
     dg = Datagram()
     dg.add_data(data)
     return dg
コード例 #4
0
    def poll_datagram(self):
        self.socket.setblocking(0)
        try:
            length = struct.unpack('<H', self._read(2))[0]
        except socket.error as err:
            if err.errno is errno.EWOULDBLOCK:
                return None
            else:
                raise err

        self.socket.setblocking(1)
        data = self._read(length)
        dg = Datagram()
        dg.add_data(data)
        return dg