You do not need to create a new socket to communicate with controllers, you can reuse existing socket and just change the destination address to match the address of the controller that you can to communicate with. I have an example of this here
https://github.com/ptony82/controllers/blob/features/fof-routing/src/vpn_controller.py#L207

basically, your controller only needs one UDP socket to function with ipop-tincan and other controllers, the only thing that changes is the destination IP address and port