LINUX.ORG.RU

не хочешь перед тем, как писать сетевые приложения, сначала пойти почитать книжку про TCP/IP?

anonymous
()

А если будут два интерфейса где адреса сетей будут одинаковыми

Вы уверены, что подобная конфигурация является корректной?

ArcFi
()

Когда открываешь сокет, вроде можно указать какой интерфейс слушать - вот и вариант. Я так и делал, правда на QtNetwork, создавал два класса QTcpServer и каждый слушал на одном интерфейсе и я всегда знал откуда пришли данные.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

У маршрутизаторов и 50 интерфейсов

без адреса сетевого уровня с разными адресами канального уровня могут быть в подчинении у мостового интерфейса

с одним адресом

ArcFi
()
Ответ на: комментарий от ArcFi

Всё же, у разных интерфейсов может быть например различная настройка LACP, они явно не могут лежать в одном bridge. Не, не вариант, мне так кажется. Чутьё :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от ArcFi

Он нет, а я да.
Это разрешённая конфигурация и сервер будет работать.

zolden ★★★★★
()

Как тогда узнать для какого интерфейса пришёл адрес?

завести по сокету на каждый девайс в отдельности - самое милое дело.

MKuznetsov ★★★★★
()
	while(new != NULL){
		new = new->node;
		free(new);
	}
	int get;
	memset(&arp,0,sizeof(arp));
	char *devices = know_device(addr);
	if (devices!= NULL){
		/*[...]*/
	}

		close(get);
	if (pthread_create(&com, NULL, command, NULL)==-1){
		perror("pthread_create");
	}

-_-

Там ещё наверняка какой-нибудь race condition с сингалами есть, лень смотреть.

doushiyou
()

Вот самый лучший способ, который я знаю.

#include <linux/if_packet.h>
#include <net/if.h>

/* структура чтобы узнать индекс */
struct sockaddr_ll sll; 

char buf[1500];
int size = sizeof(struct sockaddr_ll);

/* получить сообщение и заполнить структуру */
recvfrom(sock, &buf, 1500, 0, (struct sockaddr *)&sll, &size);

char interface[15];

/* а теперь можно узнать название интерфейса по индексу */
if_indextoname(sll.sll_ifindex, interface);

/* и всё. Название теперь в interface */
u0atgKIRznY5
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.