이 경우 bind(2)
이 필요하지 않습니다.
당신이 여기서하려는 것은 다른 네트워크 인터페이스을 소켓과 함께 사용하는 것입니다. 시스템 기본값 이외의 네트워크 인터페이스를 사용하려면 SO_BINDTODEVICE
소켓 옵션을 setsockopt
과 함께 사용해야합니다. 예를 들어, "eth1"
과 같이 사용하려는 인터페이스는 필드의 ifreq
struct 인 문자열로 지정해야하며 setsockopt
으로 전달되어야합니다. 이렇게하려면 <net/if.h>
헤더를 포함해야합니다.
기본적으로, 다음 (안된) 코드 같은 :
또한
int set_interface(int socket_fd, const char* interface_name)
{
ifreq interface;
memset(&interface, 0, sizeof(interface));
strncpy(interface.ifr_name, interface_name, IFNAMSIZ);
int res = setsockopt(socket_fd, SOL_SOCKET, SO_BINDTODEVICE, &ifreq, sizeof(ifreq));
return res;
}
, 당신은 setsockopt
이 실패 할 경우, 반환 코드를 확인해야합니다.
바인딩과 SO_BINDTODEVICE의 차이점은 무엇입니까? 왜 바인드가 내 문제를 해결하지 못하는 걸까요? – cateof
@cateof,'bind (2)'는 소켓을 특정 끝점 (IP 주소와 포트)에 바인딩합니다. "네트워크 인터페이스"에 대한 개념이 없습니다. 특정 네트워크 인터페이스와 소켓을 연결하려면''헤더의 특수 기능을 사용해야합니다. –