Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > how to bind socket to interface?


Автор: dzheika 30.6.2009, 16:34
Есть несколько сетевых интерфейсов, и вроде бы как bind решает проблему, но появляется новая, когда несколько интерфейсов имеют одинаковые локальные ip в разных подсетях, как в этом случае быть? и вообще, как привязать сокет по имени интерфейса не даваясь в подробности его адреса?
Копнув немного кода под unix нашел примерно следующее (или как работает ping -I):

Код

int sock;
struct ifreq ifinfo;
struct sockaddr_ll sockinfo;
/* open socket */
sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
/* get interface index number */
memset(&ifinfo, 0, sizeof(ifinfo));
strcpy(ifinfo.ifr_name, "eth1");
ioctl(sock, SIOCGIFINDEX, &ifinfo);
/* set sockinfo pointing to interface */
memset(&sockinfo, 0, sizeof(sockinfo));
sockinfo.sll_family = PF_PACKET;
sockinfo.sll_protocol = htons(ETH_P_ALL);
sockinfo.sll_ifindex = ifinfo.ifr_ifindex;
/* bind socket to specific interface */
bind(sock, (struct sockaddr*)&sockinfo, sizeof(sockinfo));


возможно ли тоже самое провернуть и на java?

Автор: LSD 2.7.2009, 13:25
А разве на одной машине два разных интерфейса могут иметь один и тот же адрес?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)