UDT Tutorial

Error Handling

All UDT API will return an error upon a failed operation. Particularly, UDT defines UDT::INVALID_SOCK and UDT::ERROR as error returned values. Application should check the return value against these two constants (several routine return false as error value).

On error, getlasterror can be used to retrieve the error information. In fact, the function returns the latest error occurred in the thread where the function is called. getlasterror returns a ERRORINFO structure, it contains both the error code and special text error message. Two helper functions of getErrorCode and getErrorMessage can be used to read these information.

Examples

sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(21); //invalid port number
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(&(my_addr.sin_zero), '\0', 8);
 

UDTSOCKET serv = UDT::socket(AF_INET, SOCK_STREAM, 0);
if (UDT::ERROR == UDT::bind(serv, (sockaddr*)&my_addr, sizeof(my_addr)))
{
   cout << "bind: " << UDT::getlasterror().getErrorMessage();

 

   // further action may depends on UDT::getlasterror().getErrorCode().

   // system level error can be accessed through "errno"


   return 0;
}

In the example above, the output will be:

error message: Couldn't set up network connection: Permission denied.

The UDT error code only reflects the operation error of the UDT socket level. Applications can still read the system level error (e.g., errno in Linux, GetLastError in Windows) to read more specific error information. However, the error message obtained by getErrorMessage contains information of both the UDT level error and the system level error.