Per quanto segue, sto assumendo una scheda di rete.Come ignorare i propri pacchetti udp di trasmissione
Ho un componente del mio programma che è progettato per consentire agli altri nella subnet di conoscerne l'esistenza. Per questo, ho implementato una soluzione in cui ogni volta che il programma si avvia (e periodicamente dopo) invia una trasmissione a INADDR_BROADCAST
- chiunque ascolti sulla porta richiesta ricorderà da dove proviene per un uso successivo.
Il problema con questo è che non voglio ricordare le mie proprie trasmissioni. Pensavo che in teoria sarebbe stato facile farlo: basta trovare l'ip locale e confrontare quello che si ottiene in recvfrom
.
Tuttavia, ho trovato difficile ottenere l'IP locale: getaddrinfo
con NULL restituisce 127.0.0.1
, getaddrinfo
con il nome host restituisce l'ip pubblico. Qualcuno può indicarmi la direzione di trovare l'IP subnet attuale? Penso che mi manchi qualcosa di molto ovvio, ma mi manca ancora :)
Nota: ho letto altre domande SO su trasmissioni, in particolare questa: UDP-Broadcast on all interfaces ma non l'ho arrivato ancora al problema dell'interfaccia multipla.
Perché non stai sfruttando soluzioni esistenti come mDNS (Multicast-DNS)? – jldupont
mDNS è troppo complicato per le mie esigenze. – laura