Получить адрес подключившегося клиента (accept) [РЕШЕНО]

Добрый день!

Реализовал серверную часть программы и хочу в лог выводить адрес и порт подключившегося клиента.
Пишу на Си (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 есть такие макросы

 В 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 написал(а): Начни с

slepnoga написал(а):
Начни с ман freeaddrinfо

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

Кто-то нормальный ответ дать

Кто-то нормальный ответ дать может?

Видите ли, *НИКС - это такая

Видите ли, *НИКС - это такая система, где, как правило, изобретать велосипед не надо - 99% того, что вам надо, уже сделано, и сделано лучше вас. Просто это еще и такая система, где надо жить "по-ленински" - учиться, учиться и учиться, т.е. читать, читать и еще читать.
Короче - вам нужен net-analyzer/arpwatch :)

SysA написал(а): Видите ли,

SysA написал(а):
Видите ли, *НИКС - это такая система, где, как правило, изобретать велосипед не надо - 99% того, что вам надо, уже сделано, и сделано лучше вас. Просто это еще и такая система, где надо жить "по-ленински" - учиться, учиться и учиться, т.е. читать, читать и еще читать.
Короче - вам нужен net-analyzer/arpwatch :)

Не люблю все эти разговоры на форумах по-делу, но видно, придётся.
Я каждый день перелопачиваю тонны манов. Мне надо поддерживать POSIX-системы и частичные POSIX. Среди них FreeBSD, Linux, Unix System V и QNX. И, притом, конечная архитектура может быть вовсе не x86.
И когда я тут задаю вопрос, я явно указываю что мне нужно и не прошу чтобы мне написали RTFM или отослали к ману, который не имеет никакого отношения к вопросу.

И про Ленина я знаю, тоже не надо мне говорить. Если вы очень опытный системный программист и пользователь никсов, не надо "псевдообучения" про Ленина и "учиться, учиться, учитья". Без этого понятно.

Если грубо, простите. Просто я очень люблю и уважаю этот форум и всё сообщество Linux, но мне очень неприятно когда в этой среде начинают "учить" читать маны или просто отправляют по ложному адресу.
По-моему, я задал вполне корректный и конкретный вопрос.

Ещё раз простите. Весь день вожусь с демоном и уже крыша едет и когда вижу такие ответы, очень раздражает!

SysA написал(а):
что вам надо, уже сделано, и сделано лучше вас.

Просто вы в глубины системы, наверное, не лазили, поэтому так говорите. Между unix-like системами совместимости практически нет никакой!!! И в Linux, в частности, есть множество вещей, которые сделано просто отвратительно! И приходится их переделывать или обходить. Боготворить никсы тоже не надо. Будьте трезвы и хладнокровно оценивайте всё.

И так, вопрос остаётся открытый. Есть ли какая-нибудь функция или какой-нибудь макрос, который позволит преобразовать адрес? Делать на сдвигах самому как-то криво, а в хедерах нигде не могу найти такого. Должно же быть.

2 минуты

2 минуты гугления:

inet_ntoa(client_addr.sin_addr);

так что не надо тут напрасно злиться, это еще никому не помогло

gry написал(а): 2 минуты

gry написал(а):
2 минуты гугления:

inet_ntoa(client_addr.sin_addr);

Спасибо! А то уже совсем запутался.

gry написал(а):
так что не надо тут напрасно злиться, это еще никому не помогло

Да это понятно, просто раздражает!

gry написал(а):
2 минуты гугления

Молодец!

...

Я не знаю, насколько это надо долбиться на глаза и на голову, чтобы пороть такую вот чушь.

Человек же ясно пишет, что нужно из цифры сделать адрес программно, блджад! В Сях! Неужели этого Вы не видите? На кой пёс, простите, давать ослоумные советы на тему "Что такое Юникс" ??

Баньте, трите - но не сдержался.

Топикстартеру:
man inet_ntoa
http://www.opennet.ru/man.shtml?topic=inet_ntoa&category=3&russian=0

man inet_ntoa написал(а):
Функция inet_ntoa() преобразует IP-адрес in, заданный в сетевом порядке расположения байтов, в стандартный строчный вид, из номеров и точек. Строка располагается в статически размещенном буфере; последующие вызовы перепишут его данные.

UPD: эх, не успел :)

Спасибо огромное! Именно

Спасибо огромное!
Именно такой ответ я ожидал - кратко, точно и по делу.
Ещё раз спасибо! Уже всё применил, работает. :) Двигаемся дальше в дебрях Linux.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".