thanks for the explanation. After adding some brackets, your example code works like a charm.
Using your pointers, I tried the next step: TLS.
ipv4_endpoint = endpoints.serverFromString(
reactor, 'ssl:{}:privateKey={}:certKey={}:interface={}'.format(
options['port'],
endpoints.quoteStringArgument(options['cert_path']),
endpoints.quoteStringArgument(options['key_path']),
options['ipv4_address']))
ipv6_endpoint = endpoints.serverFromString(
reactor, 'ssl:{}:privateKey={}:certKey={}:interface={}'.format(
options['port'],
endpoints.quoteStringArgument(options['cert_path']),
endpoints.quoteStringArgument(options['key_path']),
options['ipv6_address']))
ipv4 = internet.StreamServerEndpointService(ipv4_endpoint, meteo_factory)
ipv6 = internet.StreamServerEndpointService(ipv6_endpoint, meteo_factory)
root = MultiService()
ipv4.setServiceParent(root)
ipv6.setServiceParent(root)
does not work. It fails with: