2012-05-15 3 views
2

Приложение, над которым я работаю, должно уметь прослушивать несколько номеров портов (сейчас 4).C/как прослушивать несколько портов UDP

if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { 
    perror("error: could not create UDP socket\n"); 
    exit(EXIT_FAILURE); 
} 

bzero(&sock_addr, sizeof(sock_addr)); 
sock_addr.sin_family = AF_INET; 
sock_addr.sin_port  = htons(port1); 
sock_addr.sin_addr.s_addr = inet_addr(INADDR_ANY); 

if(bind(sock_fd, (struct sockaddr *) &sock_addr, sock_len) < 0) { 
    perror("error: could not bind UDP socket to AU\n"); 
    exit(EXIT_FAILURE); 
} 

Или есть более элегантный способ сделать это: мне нужно создать сокет для каждого из этих портов, как делать? Также я прочитал о заявлении select(), это было бы что-то, что я должен использовать? Причина, по которой я хочу слушать несколько портов, довольно проста, она должна идентифицировать приложение, с которым я общаюсь. Например. одно приложение на порт.

Заранее благодарим за ваши комментарии.

// UPDATE: Как настроить один сокет на порт?

ответ

4

Да, вам нужны отдельные сокеты для каждой пары (IP, порт), с которыми вы хотите общаться.

И да, вы можете абсолютно использовать функцию select() (это не «инструкция», которая подразумевает как бы часть языка, это просто функция в библиотеке), чтобы обслуживать несколько сокетов, как только вы их установили вверх.

+0

Можете ли вы дать мне краткое введение в том, как настроить сокеты и их соответствующие порты? Всякий раз, когда я пытаюсь настроить один сокет на порт, я получаю ошибку ': Address уже в использовании'. – nyyrikki

+0

Возможно, вы пытаетесь связать свой сокет с портом, который уже используется другим приложением. Подробности и примеры на C-сокетах см. Здесь: http://www.linuxhowtos.org/C_C++/socket.htm – fduff

+1

Настройка SO_REUSEADDR также очень помогает в отношении использования портов - как после сбоя программы. – Walter

Смежные вопросы