sio_get_interface_list 제어 코드로 WSAIOCTL에 의해 리턴 된 네트워크 인터페이스를 다시 주문하는 방법

StackOverflow https://stackoverflow.com/questions/1916452

  •  20-09-2019
  •  | 
  •  

문제

Win32 Winsock이 반환 한 네트워크 인터페이스의 순서를 지시하는 방법이 있습니까? WSAIoctl 기능 SIO_GET_INTERFACE_LIST 기능?

배경:

Windows에서 ACE/TAO CORBA 구현을 실행하는 NamesService에는 IIOP.NET CORBA 구현을 사용하여 클라이언트가 구현 한 ACE/TAO 기반 서비스가 등록 된 이기종 CORBA 시스템이 있습니다. IIOP.NET 기반 클라이언트는 별도의 Windows 시스템에 있습니다. ACE/TAO 머신에는 여러 네트워크 인터페이스 (클라이언트 시스템에서만 액세스 할 수 있음)와 여러 IP 주소가 있습니다.

iiop.net 클라이언트는 NamesService에 연결하고 사용해야하는 등록 된 서버 CORBA 객체에 프록시를 검색 할 수 있지만 프록시를 사용하려고 할 때는 예외가 발생합니다.

디버깅을 너무 많은 시간을 보낸 길을 기반으로, 우리는 IIOP.NET가 서비스를 요청할 때 이름 서비스가 반환되는 CORBA IOR 문자열의 첫 번째 IP 주소에만 연결하려고 시도한다는 결론에 도달했습니다. IOR 문자열은 IP 주소 (ES)를 포함한 객체에 대한 설명입니다. 대부분의 CORBA 클라이언트는 IOR 문자열의 모든 주소를 사용하여 서버 객체와 연결하려고 시도하지만 iiop.net이 그렇게하지 않는 것처럼 보입니다.

IOR 문자열을 생성하는 ACE/TAO 코드는 WinSock을 사용합니다. WSAIoctl 제어 코드로 명령 SIO_GET_INTERFACE_LIST 상자의 네트워크 인터페이스 목록을 반환 한 다음 모두 IOR 문자열에 추가합니다. 문제는 첫 번째 IP 주소는 IIOP 클라이언트가 사용하는 네트워크에 있지 않은 주소이므로 IIOP.NET 클라이언트가 IP 주소를 사용하여 해당 IP 주소를 사용하여 서버 객체에 연결하려고 할 때 분명히 실패하고 사용하려고 시도하지 않습니다. 올바른 IP 주소. ACE/TAO와 같은 다른 CORBA 클라이언트는 모든 IP 주소를 시도 하고이 구성에서 작동합니다.

나는 네트워킹/코바 신이 아니기 때문에 에이스/타오 또는 iiop.net을 변경하려고 시도하는 것은 현실적이지 않으며이 시스템에 두 개의 분리 된 네트워크가 있어야할만한 이유가 있지만, 첫 번째 기본 IP 인 경우에는 기본 IP가 있습니다. 주소가 반환되었습니다 WSAIOCtl 클라이언트가 필요로하는 것이었기 때문에 IP 주소가 IOR 문자열의 첫 번째 IP 주소가되고 iiop.net은 해당 IP 주소를 성공적으로 사용하기 때문에 문제를 해결할 수 있습니다. 신뢰할 수있는 방법이 있습니까? WSAIoctl 네트워크 인터페이스를 다른 순서로 반환하려면? 불행히도 MSDN에 문서화 된 내용은 보이지 않습니다.

감사,

데이브

도움이 되었습니까?

해결책

나는 해결책을 찾았고 다른 사람이 이것에 반대하는 경우 답을 제공하고 있습니다. ACE/TAO ORB에는 명령 줄 매개 변수가 있습니다. WSAIoctl. 명령 줄 매개 변수는입니다 -ORBListenEndpoints 또한 호스트 이름과 IP 주소의 세미콜론에 따른 목록을 제공 할 수 있습니다. Google -ORBListenEndpoints 그리고 당신은 정확한 구문을 찾을 수 있습니다. 해당 명령 줄 매개 변수를 수신하는 ORB로 초기화 된 모든 서버는 지정된 엔드 포인트에서 듣습니다. 나는 이것을 테스트했고 그것은 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top