Получить адрес подключившегося клиента (accept) [РЕШЕНО]
Bodro 10 Августа, 2010 - 17:52
Добрый день!
Реализовал серверную часть программы и хочу в лог выводить адрес и порт подключившегося клиента.
Пишу на Си (gcc -std=gnu99).
typedef struct sockaddr sockaddr_t; typedef sockaddr_t* sockaddr_p; typedef struct sockaddr_in sockaddr_in_t; // Далее ещё код int sock = 0; sockaddr_in_t client_addr; int newsock = 0; // Далее соответствующие настройки // accept newsock = accept(sock, (sockaddr_p) &client_addr, sizeof(client_addr)); // Вывод в лог log_print("Новое подключение. Адрес: %x; Порт: %d\n", client_addr.sin_addr.s_addr, ntohs(client_addr.sin_port));
Результат:
[15328]: Новое подключение. Адрес: 7fff; Порт: 33763
Понятно дело выводится в HEX-виде непонятно что. Есть какой-то способ получить адрес в нормальном виде по типу "127.0.0.1" не используя самому смещения и прочее? В Linux есть такие макросы или функции для таких случаев?
»
- Для комментирования войдите или зарегистрируйтесь
В Linux есть такие макросы
В Линухе нету :)
Есть в глибце.
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Раз знаешь, что не ответил
Раз знаешь, что не ответил то???
Начни с ман freeaddrinfо
Начни с ман freeaddrinfо
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
slepnoga написал(а): Начни с
Ниразу от тебя нормального ответа я не слышал. Зачем вообще тогда пишешь? Чтобы просто языком почесать (пальцами по клавиатуре), есть специальный раздел. Там и пиши. Зачем засоряешь форум ненужными фразами и информацией, не имеющей отношения к вопросу???
Кто-то нормальный ответ дать
Кто-то нормальный ответ дать может?
Видите ли, *НИКС - это такая
Видите ли, *НИКС - это такая система, где, как правило, изобретать велосипед не надо - 99% того, что вам надо, уже сделано, и сделано лучше вас. Просто это еще и такая система, где надо жить "по-ленински" - учиться, учиться и учиться, т.е. читать, читать и еще читать.
Короче - вам нужен net-analyzer/arpwatch :)
SysA написал(а): Видите ли,
Не люблю все эти разговоры на форумах по-делу, но видно, придётся.
Я каждый день перелопачиваю тонны манов. Мне надо поддерживать POSIX-системы и частичные POSIX. Среди них FreeBSD, Linux, Unix System V и QNX. И, притом, конечная архитектура может быть вовсе не x86.
И когда я тут задаю вопрос, я явно указываю что мне нужно и не прошу чтобы мне написали RTFM или отослали к ману, который не имеет никакого отношения к вопросу.
И про Ленина я знаю, тоже не надо мне говорить. Если вы очень опытный системный программист и пользователь никсов, не надо "псевдообучения" про Ленина и "учиться, учиться, учитья". Без этого понятно.
Если грубо, простите. Просто я очень люблю и уважаю этот форум и всё сообщество Linux, но мне очень неприятно когда в этой среде начинают "учить" читать маны или просто отправляют по ложному адресу.
По-моему, я задал вполне корректный и конкретный вопрос.
Ещё раз простите. Весь день вожусь с демоном и уже крыша едет и когда вижу такие ответы, очень раздражает!
Просто вы в глубины системы, наверное, не лазили, поэтому так говорите. Между unix-like системами совместимости практически нет никакой!!! И в Linux, в частности, есть множество вещей, которые сделано просто отвратительно! И приходится их переделывать или обходить. Боготворить никсы тоже не надо. Будьте трезвы и хладнокровно оценивайте всё.
И так, вопрос остаётся открытый. Есть ли какая-нибудь функция или какой-нибудь макрос, который позволит преобразовать адрес? Делать на сдвигах самому как-то криво, а в хедерах нигде не могу найти такого. Должно же быть.
2 минуты
2 минуты гугления:
так что не надо тут напрасно злиться, это еще никому не помогло
gry написал(а): 2 минуты
Спасибо! А то уже совсем запутался.
Да это понятно, просто раздражает!
Молодец!
...
Я не знаю, насколько это надо долбиться на глаза и на голову, чтобы пороть такую вот чушь.
Человек же ясно пишет, что нужно из цифры сделать адрес программно, блджад! В Сях! Неужели этого Вы не видите? На кой пёс, простите, давать ослоумные советы на тему "Что такое Юникс" ??
Баньте, трите - но не сдержался.
Топикстартеру:
man inet_ntoa
http://www.opennet.ru/man.shtml?topic=inet_ntoa&category=3&russian=0
UPD: эх, не успел :)
Спасибо огромное! Именно
Спасибо огромное!
Именно такой ответ я ожидал - кратко, точно и по делу.
Ещё раз спасибо! Уже всё применил, работает. :) Двигаемся дальше в дебрях Linux.