UDP has its advantages over TCP, such as being relatively lightweight and receiving one packet per read call (recvmsg), although the programmers need to handle related issues, such as packet lost and out-of-order packets delivery. This post gives information and references on how to write UDP programs in a C/Linux environment.
What is UDP ∞
Check the wikipedia article on UDP User Datagram Protocol for a brief overview. RFC 768 defines the standard of the UDP. For an introduction to TCP and UDP, the wiki book TCP and UDP Protocols is a good source.
UDP Programming in C on Linux/Unix ∞
For more details on UDP programming including UDP sockets and detailed explanation of the data structures used, check this tutorial: Programming with UDP sockets. This worksheet Introduction to User Datagram Protocol on *nix with C can also be a good learning material.
If you would like to study even more details, check Beej’s Guide to Network Programming.
As aforementioned, UDP has its complexities for programming with. For reliable bulk data transfer, UDT is a possible good option.
UDT: UDP-based Data Transfer ∞
UDT is an efficient and easy to use library to transfer bulk data with its own reliability control and congestion control mechanisms. Being fast is one of UDT’s key features. Besides, concurrent UDT flows can share the available bandwidth fairly and UDT is also friendly to TCP flows.
For the design of UDT, check the paper UDT: UDP-based data transfer for high-speed wide area networks and Supporting Configurable Congestion Control in Data Transport Services. For more technical details, the Internet-Draft UDT: UDP-based Data Transfer Protocol is a good point to start with. And of course, you can read the source code of UDT which is opened under BSD license (since UDT version 4).
Programming Using UDT ∞
The UDT manuals provides easy to follow guide on installation and programming tutorial: UDT 4 documents.
To check out the UDT source code from its git repository on Sourceforge:
$ git clone git://git.code.sf.net/p/udt/git udt-git
As UDT is a C++ library, to use it in C or other languages, you need to wrap the APIs in C (for languages other that C, you may need to wrap the C functions again). Tom Zhou already provides a C wrapper implementation also under the BSD license which can be downloaded here.
Have other good suggestions on UDP programming? Share them in the comments.