2009-07-13 3 views
3

현재 나는 모든 인터페이스에서 사용 가능한 포트에서 수신하려면 다음을 수행하십시오어떻게 하나의 네트워크 인터페이스에만 소켓을 동적으로 바인딩합니까?

// hints struct for the getaddrinfo call 
struct addrinfo hints, *res; 
memset(&hints, 0, sizeof hints); 
hints.ai_family = AF_INET; 
hints.ai_socktype = SOCK_STREAM; 
hints.ai_flags = AI_PASSIVE; 

// Fill in addrinfo with getaddrinfo 
if (getaddrinfo(NULL, "0", &hints, &res) != 0) { 
    cerr << "Couldn't getaddrinfo." << endl; 
    exit(-1); 
} 

나는 동적으로 하나의 인터페이스, 시스템의 비 루프백 인터페이스에 결합하고 싶습니다.

어떻게해야합니까?

답변

4

SO_BINDTODEVICE을 (를) 살펴보십시오. W. 리처드 스티븐스에 의해

UNIX 네트워크 프로그래밍, 두 권의 : 당신이 문제에 대한 훌륭한 책을 원하는 경우 Tuxology이

+0

사이트가 다운 된 캐시 된 사본입니다. http://web.archive.org/web/20090812134009/http://tuxology.net/tag/interface –

1

good description 있습니다. 볼륨 1은 소켓을 덮습니다.

또한 Stevens가 UNIX 환경에서 고급 프로그래밍을하고 Rago가 3 판에서 업데이트했습니다.

널리위한 고전 및 표준 참조로 간주됩니다 유닉스/리눅스/등

1

당신은 특정 인터페이스의 IP 주소를 결정하기 위해 SIOCGIFADDR ioctl()을 사용하고 bind() 그 주소로 할 수 있습니다.

+0

이것은 가장 일반적인 해결책입니다. 동일한 주소 또는 인터페이스를 가진 여러 인터페이스가 주소를 변경합니다. – ephemient

관련 문제