# Module `utils.comm_socket`

Expand source code

    #!/usr/bin/env python3

    import socket

    class CommSocket:
        def __init__(self, sock=None):
            """Ctor for socket communication socket object"""
            if sock is None:
                self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            else:
                self.sock = sock
            # Turn off timeout
            self.sock.settimeout(None)

        def rawSend(self, msg):
            """
            Send a raw bytes over a network in form of <LEN:><BYTES>,
            where <LEN:> is encoded in text format and it total length of the message.

            Args:
                msg(bytes): A bytes like object

            Returns:
                None.
            """

            sent = self.sock.send(bytes(f"{len(msg)}:", "utf-8"))
            if sent == 0:
                raise RuntimeError("socket connection broken")

            msgLen = len(msg)
            totalsent = 0
            while totalsent < msgLen:
                sent = self.sock.send(msg[totalsent:])
                if sent == 0:
                    raise RuntimeError("Socket connection broken")
                totalsent = totalsent + sent

        def rawSendString(self, msg):
            """Send a text string (encoded in UTF-8) over a network.

            Args:
                msg(str): text string that will be send over the network.

            Returns:
                None.
            """
            self.rawSend(bytes(msg, 'utf-8'))

        def rawRecvString(self):
            """Wait and receive string object
            Returns:
                Obtained string from the network connection.
            """
            return self.rawRecv().decode('utf-8')

        def rawRecv(self):
            """Wait and receive bytes-like object
            Returns:
                Bytes object.
            """
            prefix = []
            while True:
                chunk = self.sock.recv(1)
                if chunk == b'':
                    raise RuntimeError("socket connection broken")
                elif chunk == b':':
                    break
                else:
                    prefix.append(chunk.decode())

            MSGLEN = int(''.join(prefix))
            chunks = []
            bytes_recd = 0
            while bytes_recd < MSGLEN:
                chunk = self.sock.recv(min(MSGLEN - bytes_recd, 2048))
                if chunk == b'':
                    raise RuntimeError("socket connection broken")
                chunks.append(chunk)
                bytes_recd = bytes_recd + len(chunk)
            return b''.join(chunks)
            # ==============================================================================================================

## Classes

`class CommSocket (sock=None)`

  Ctor for socket communication socket object

  Expand source code

      class CommSocket:
          def __init__(self, sock=None):
              """Ctor for socket communication socket object"""
              if sock is None:
                  self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
              else:
                  self.sock = sock
              # Turn off timeout
              self.sock.settimeout(None)

          def rawSend(self, msg):
              """
              Send a raw bytes over a network in form of <LEN:><BYTES>,
              where <LEN:> is encoded in text format and it total length of the message.

              Args:
                  msg(bytes): A bytes like object

              Returns:
                  None.
              """

              sent = self.sock.send(bytes(f"{len(msg)}:", "utf-8"))
              if sent == 0:
                  raise RuntimeError("socket connection broken")

              msgLen = len(msg)
              totalsent = 0
              while totalsent < msgLen:
                  sent = self.sock.send(msg[totalsent:])
                  if sent == 0:
                      raise RuntimeError("Socket connection broken")
                  totalsent = totalsent + sent

          def rawSendString(self, msg):
              """Send a text string (encoded in UTF-8) over a network.

              Args:
                  msg(str): text string that will be send over the network.

              Returns:
                  None.
              """
              self.rawSend(bytes(msg, 'utf-8'))

          def rawRecvString(self):
              """Wait and receive string object
              Returns:
                  Obtained string from the network connection.
              """
              return self.rawRecv().decode('utf-8')

          def rawRecv(self):
              """Wait and receive bytes-like object
              Returns:
                  Bytes object.
              """
              prefix = []
              while True:
                  chunk = self.sock.recv(1)
                  if chunk == b'':
                      raise RuntimeError("socket connection broken")
                  elif chunk == b':':
                      break
                  else:
                      prefix.append(chunk.decode())

              MSGLEN = int(''.join(prefix))
              chunks = []
              bytes_recd = 0
              while bytes_recd < MSGLEN:
                  chunk = self.sock.recv(min(MSGLEN - bytes_recd, 2048))
                  if chunk == b'':
                      raise RuntimeError("socket connection broken")
                  chunks.append(chunk)
                  bytes_recd = bytes_recd + len(chunk)
              return b''.join(chunks)
              # ==============================================================================================================

  ### Methods

  `def rawRecv(self)`

    Wait and receive bytes-like object

    ## Returns

    Bytes object.

    Expand source code

        def rawRecv(self):
            """Wait and receive bytes-like object
            Returns:
                Bytes object.
            """
            prefix = []
            while True:
                chunk = self.sock.recv(1)
                if chunk == b'':
                    raise RuntimeError("socket connection broken")
                elif chunk == b':':
                    break
                else:
                    prefix.append(chunk.decode())

            MSGLEN = int(''.join(prefix))
            chunks = []
            bytes_recd = 0
            while bytes_recd < MSGLEN:
                chunk = self.sock.recv(min(MSGLEN - bytes_recd, 2048))
                if chunk == b'':
                    raise RuntimeError("socket connection broken")
                chunks.append(chunk)
                bytes_recd = bytes_recd + len(chunk)
            return b''.join(chunks)
            # ==============================================================================================================

  `def rawRecvString(self)`

    Wait and receive string object

    ## Returns

    Obtained string from the network connection.

    Expand source code

        def rawRecvString(self):
            """Wait and receive string object
            Returns:
                Obtained string from the network connection.
            """
            return self.rawRecv().decode('utf-8')

  `def rawSend(self, msg)`

    Send a raw bytes over a network in form of , where is encoded in text format and it total length of the message.

    ## Args

    msg(bytes): A bytes like object

    ## Returns

    None.

    Expand source code

        def rawSend(self, msg):
            """
            Send a raw bytes over a network in form of <LEN:><BYTES>,
            where <LEN:> is encoded in text format and it total length of the message.

            Args:
                msg(bytes): A bytes like object

            Returns:
                None.
            """

            sent = self.sock.send(bytes(f"{len(msg)}:", "utf-8"))
            if sent == 0:
                raise RuntimeError("socket connection broken")

            msgLen = len(msg)
            totalsent = 0
            while totalsent < msgLen:
                sent = self.sock.send(msg[totalsent:])
                if sent == 0:
                    raise RuntimeError("Socket connection broken")
                totalsent = totalsent + sent

  `def rawSendString(self, msg)`

    Send a text string (encoded in UTF-8) over a network.

    ## Args

    msg(str): text string that will be send over the network.

    ## Returns

    None.

    Expand source code

        def rawSendString(self, msg):
            """Send a text string (encoded in UTF-8) over a network.

            Args:
                msg(str): text string that will be send over the network.

            Returns:
                None.
            """
            self.rawSend(bytes(msg, 'utf-8'))