':param ip: String representation of an ipv4 address
:type ip: str
:param port: Integer representation of a port
:type port: int
:raises ValueError: Thrown when one of the arguments are invalid'

def __init__(self, ip, port):

    super(SocketAddress, self).__init__()
    assert isinstance(ip, str), type(ip)
    assert isinstance(port, int), type(port)
    if (not is_valid_address((ip, port))):
        raise ValueError('Address    is    not    valid')
    self._ip = ip
    self._port = port
