2014-11-15 2 views
1

В C вы можете использовать имя службы, чтобы получить номер порта при использовании getaddrinfo, как это:обслуживание на номер порта, как getaddrinfo

getaddrinfo("stackoverflow.com", "http", &hints, &results); 

Это присвоит 80 (большой обратный порядок байт) в первых двух байтах (uint16_t) результатов-> ai_addr.

Есть ли какой-нибудь простой способ получить номер порта? давая имя службы? Мне нужно это для серверной части, где я хочу разрешить пользователю указывать номер порта или имя службы для подключения и прослушивания порта.

+0

'Grep -w HTTP/и т.д./services'? – alk

+0

@alk, это хорошая идея, но есть ли для этого стандартная функция C? –

+0

Нет, а также 'getaddrinfo()' не является стандартным C. – alk

ответ

1

человек getservbyname

#include \netdb.h> 
    struct servent *getservent(void); 
    struct servent *getservbyname(const char *name, const char *proto); 
    struct servent *getservbyport(int port, const char *proto); 
+0

Still POSIX, 1+ однако. – alk

+0

@alk Делайте замечание Я никогда не говорю в вопросе, что это должно быть из стандартной библиотеки C. Фактически, я упоминаю getaddrinfo, которого нет в стандартной библиотеке C. Когда я в комментарии сказал некоторые стандартные функции С для этого, я имел в виду больше, как в обычно используемой функции C/library, которая в значительной степени используется в стандарте, но я получаю путаницу. –

+1

Это устаревшее/устаревшее и не потокобезопасное. Правильный способ - «getaddrinfo». –