Trasmissione e unicast UDP attraverso lo stesso socket?
Domanda
Ho un'applicazione Linux che apre un socket UDP e lo collega a una porta. Non ho avuto problemi a inviare pacchetti unicast attraverso il socket. Ho avuto occasione di inviare un pacchetto di trasmissione, quindi ho abilitato SO_BROADCAST, che ha permesso il passaggio dei pacchetti di trasmissione, ma poi ho notato che venivano trasmessi anche i pacchetti unicast. Questo comportamento previsto è per un socket UDP o è più probabile che abbia configurato male qualcosa?
Soluzione
Da quello che ho capito SO_BROADCAST è un'opzione socket. Quindi, se lo abiliti sul tuo socket, questo socket trasmetterà. Immagino che dovrai aprire socket diversi se vuoi fare unicast e trasmettere dallo stesso codice.
Altri suggerimenti
Non ho fatto molta pratica sulla programmazione qui, ma probabilmente è necessario fornire ulteriori informazioni sulla libreria, versione del sistema operativo, codice, ecc. Forse un esempio di codice?
Se ricordo i libri che ho letto, se imposti il ??flag sul socket, ciò influenzerà tutti i datagrammi inviati dal socket, poiché il socket è sostanzialmente una struttura di dati di flag di rete + un descrittore di file.
Ho capito lo stesso problema su Linux di avere un socket che ottiene unicast e trasmette allo stesso tempo. Ho risolto il problema come segue (pseudo-codice):
-
sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP)
- Apri il socket
-
setsockopt (calzino, SOL_SOCKET, SO_BROADCAST e & amp; 1)
- Consente la trasmissione in entrata e in uscita da questo socket
-
bind (calzino, bindaddr, sizeof (struct sockaddr)
con
bindaddr.sin_family = AF_INET
bindaddr.sin_port = < YourPort >
bindaddr.sin_addr.s_addr = INADDR_ANY
- Ricevi tutti i messaggi in arrivo su qualsiasi scheda per
<YourPort>
L'avvertenza è che non esiste alcun filtro (vedere avvertenza in 3.). Quindi riceverai tutti i messaggi.
I messaggi inviati sono unicasted o trasmessi in base all'indirizzo specificato in sendto ()
.