Must be controlled from gridftp gfal2 config file, e.g. UDT=true/false (default false).
If "true", try to setup control channels with UDT, if fail, fallback to TCP.
UDT is a UDP-based transfer protocol (as opposed to TCP) which is meant for improving transfer rates on high-latency links (and, in OSG testing, achieves this...). It presents itself as an alternate XIO stack in the Globus gridftp server.
To utilize it, I think the logic goes something like:
1) Query both GridFTP servers to see if they support the Globus data channel extensions.
2) Query them again to make sure "udt" is an available data channel module.
3) Enable the data channel module accordingly.
I believe the globus-url-copy client implements a "-udt" flag which does these things [if you'd like to look at a C library which does these things].
The logic I came up is the following:
-create operationattr structure both for source and destination
-call globus_ftp_client_operationattr_set_net_stack(...) both for source and destination, which will send out "SITE SETNETSTACK gsi,udt"
-pass operationattr to gridftp handle
-initiate an operation (e.g. stat)
-if it doesn't fail for source and dest with error (500-globus_xio: Bad parameter, udt driver not whitelisted) proceed, otherwise fallback to TCP
There is another way, send to send directly to the control channels "SITE SETNETSTACK" using (must be sent both at src and dest)
result = globus_ftp_control_send_command(
"SITE SETNETSTACK %s" CRLF,