Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ С\С++ _ сокеты

Автор: oleg_2 26.7.2009, 0:03

Язык СИ
ОС UNIX
Пытаюсь написать сервер
подобный описанному сдесь
http://rsdn.ru/article/unix/sockets.xml (листинг 6).

Машина имеет несколько ip-адресов.
Прием запросов со всех имеющихся ip-адресов.
Вопрос: возможно ли узнать на какой ip-адрес
из них пришел запрос клиента?

Краткое содержание:

struct sockaddr_in addr;
struct sockaddr_in addr1;

//--- слушающий сокет sd0 ---
sd0 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

//--- привязать все имеющиеся ip-адреса ---
addr.sin_addr.s_addr = INADDR_ANY;
k=bind(sd0, (struct sockaddr *)&addr, sizeof(addr));
listen(sd0, 5);
while(1){
sd=accept(sd0, (struct sockaddr *)&addr1, &k);
//--- при возврате из accept
// структура addr1 содержит ip-адрес клиента ---

обработка запроса

}

Кто знает, прошу ответить.

Автор: ViGOur 26.7.2009, 11:28

Глянь на функцию getsockname...

Автор: oleg_2 26.7.2009, 21:31

Спасибо,
Да. Это та функция, которая нужна.
Да. Всё работает и вопрос решён. Спасибо.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)