Короткий ответ на ваш вопрос - «bind ()», предполагая, что интерфейс является BSD-socket-ish.
Более длинный ответ
bind(fd, (struct sockaddr *) &addr, sizeof(struct sockaddr_in))
где fd - файловый дескриптор сокета. Но подождите, спросите вы, что это за «addr» и почему он является указателем на struct sockaddr?
В вашем случае адрес равен
struct sockaddr_in addr;
Которая представляет собой структуру sockaddr в Интернете (указатель на которую можно привести к базовой структуре sockaddr). Перед вызовом bind вам нужно инициализировать адрес:
addr.sin_family = AF_INET;
addr.sin_port = <your chosen port number here!>;
addr.sin_addr = INADDR_ANY;
После вызова bind сокет будет привязан к выбранному вами порту, а не к случайному, и вы сможете отправлять и получать UDP-сообщения на этом порту.