UDP services require your app to bind on exactly the address fly-global-services. This is in fact an entry in /etc/hosts that resolves to a special “udp service” address for each machine. Because this may change, apps should always use the fly-global-services alias. However, the TCP side of your app should bind to 0.0.0.0 and NOTfly-global-services.
No, usually this should just work as an argument to bind() because it does the lookup internally.
Is it possible to maybe launch 2 different machines, one for TCP and one for UDP, using process groups? I know this is a massive hack and really not optimal, but it might be what you’ll need to get this working for now. We’re looking into improvements to how UDP services are implemented soon.