Come per riordinare le interfacce di rete restituito da WSAIoctl con SIO_GET_INTERFACE_LIST codice di controllo

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

  •  20-09-2019
  •  | 
  •  

Domanda

C'è un modo per dettare l'ordine delle interfacce di rete restituito da Win32 WinSock WSAIoctl funzione SIO_GET_INTERFACE_LIST funzionalità?

Sfondo:

Abbiamo un eterogeneo CORBA sistema in cui un nameservice esecuzione di ACE/TAO CORBA implementazione su Windows è ACE/TAO-based services registrata che i clienti implementato utilizzando il IIOP.NET CORBA implementazione necessario utilizzare.Il IIOP.NET-based client sono su di una macchina Windows.ACE/TAO macchina dispone di più interfacce di rete (solo uno dei quali è raggiungibile con la macchina client) e quindi più indirizzi IP.

Il IIOP.NET client può connettersi al nameservice e recuperare un proxy server registrato CORBA oggetto che si deve utilizzare, ma quando si tenta di utilizzare il proxy si genera eccezioni.

Basato sul modo in cui il troppo tempo trascorso debug, siamo arrivati alla conclusione che il problema è che IIOP.NET solo tenta di connettersi al primo indirizzo IP in CORBA IOR stringa il nome, il servizio restituisce quando è stato chiesto per il servizio.La stringa IOR è una descrizione dell'oggetto, compreso il suo indirizzo IP(es).La maggior parte CORBA tenterà di connettersi con il server in oggetto, utilizzando tutti gli indirizzi la stringa IOR, ma sembra che IIOP.NET non farlo.

ACE/TAO codice che genera la stringa IOR utilizza il WinSock WSAIoctl comando con il codice di controllo SIO_GET_INTERFACE_LIST per restituire l'elenco delle interfacce di rete nella casella e quindi aggiunge alla stringa IOR.Il problema è che il primo indirizzo IP è quello che non è in rete, che il IIOP client utilizza, in modo che quando il IIOP.NET client tenta di connettersi al server oggetto utilizzando l'indirizzo IP e, ovviamente, non riesce e non cerca mai di utilizzare l'indirizzo IP corretto.Altre CORBA come ACE/TAO fare provare a tutti gli indirizzi IP e che lavoro in questa configurazione.

Siccome io non sono un networking/CORBA dio, non è realistico per me tentare di cambiare ACE/TAO o IIOP.NET e abbiamo buoni motivi per avere due, separati da reti in questo sistema, ma se il primo, l'indirizzo IP predefinito restituito da WSAIOCtl sono uno che le esigenze del cliente, che sarebbe risolvere il problema, visto che l'indirizzo IP sarebbe poi diventato il primo indirizzo IP nella stringa IOR e IIOP.NET utilizzare l'indirizzo IP correttamente.Così, c'è un modo affidabile per causa WSAIoctl per restituire le interfacce di rete in un ordine diverso?Non ci vedo niente di documentato su MSDN su questo, purtroppo.

Grazie,

Dave

È stato utile?

Soluzione

Ho trovato la soluzione e mi fornisce la risposta in caso di chiunque altro, si scontra con questo.ACE/TAO orb è un parametro della riga di comando che consente di ignorare i risultati restituiti da WSAIoctl.Il parametro della riga di comando è -ORBListenEndpoints e consente di fornire un punto e virgola delimitato da un elenco di nomi host e gli indirizzi IP.Google -ORBListenEndpoints e scoprirete la sintassi esatta.Qualsiasi server inizializzato con una sfera di ricezione che il parametro della riga di comando sarà ascoltata l'endpoint specificato(s).L'ho provato e funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top