Per quanto ne so, l'invio di trasmissioni tramite protocollo UDP è normale. Quindi, non c'è problema nell'usare SO_BROADCAST
in setsockopt(2)
.
Disclaimer : l'unica cosa di cui DOVREBBE essere a conoscenza è il piccolo cambiamento di optval
(in setsockopt(2)
) tra Linux e l'ambiente Solaris / sunOS.
esempio di codice snippet:
static int fd = -1;
/* Use the SVR4 macros to distinguish between Solaris and SunOS */
#if defined(sun) || defined(__sun) || defined(__SVR4) || defined(__svr4__)
/* Solaris || SunOS */
char on = '1';
#else /* defined(__linux__) */
uint32_t on = 1;
#endif
if ((fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP))== -1)
{
#ifndef NDEBUG
dbg_err_fputs("Cannot open datagram: \"%s\"", strerror(errno));
#else
dbg_err_fputs("Cannot open datagram");
#endif
}
#ifdef SO_BROADCAST
if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) == -1)
{
#ifndef NDEBUG
dbg_err_fputs("Cannot set brodcast flag in socket optname: \"%s\"", strerror(errno));
#else
dbg_err_fputs("Cannot set broadcast flag in socket optname");
#endif
}
#endif /* SO_BROADCAST */
Se la tua piattaforma di sviluppo è un Solaris / sunOS, dovrai aggiungere alcuni flag alla fine del comando durante la compilazione: -lnsl -lsocket
. A seconda della versione di Solaris / SunOS, il socket funzionerà solo se si aggiunge il flag -lxnet
... Se l'errore persiste: -lresolv
.