def _message_address_parse(self, message, invert_hello=False):
		""" Read address from beacon message. If no address is specified then "nullable" WIPV4SocketInfo returns

		:param message: message to parse
		:param invert_hello: defines whether message header is the original one or reversed.
		:return: WIPV4SocketInfo
		"""
		message_header = self.hello_message(invert_hello=invert_hello)

		if message[:len(message_header)] != message_header:
			raise ValueError('Invalid message header')

		message = message[len(message_header):]
		message_parts = message.split(WBeaconGouverneurMessenger.__message_splitter__)

		address = None
		port = None

		if len(message_parts) > 3:
			raise ValueError('Invalid message. Too many separators')
		elif len(message_parts) == 3:
			address = WIPV4SocketInfo.parse_address(message_parts[1].decode('ascii'))
			port = WIPPort(int(message_parts[2]))
		elif len(message_parts) == 2 and len(message_parts[1]) > 0:
			address = WIPV4SocketInfo.parse_address(message_parts[1].decode('ascii'))

		return WIPV4SocketInfo(address, port)