Por lo que sé, el envío de transmisiones a través del protocolo UDP es normal. Por lo tanto, no hay problema para usar SO_BROADCAST
en setsockopt(2)
.
Descargo de responsabilidad : lo único que DEBE conocer es el pequeño cambio de optval
(en setsockopt(2)
) entre Linux y el entorno Solaris / sunOS.
ejemplo de código de fragmento:
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 */
Si su plataforma de desarrollo es Solaris / sunOS, tendrá que agregar algunas marcas al final del comando durante la compilación: -lnsl -lsocket
. Dependiendo de la versión de Solaris / SunOS, el socket solo funcionará si agrega el indicador -lxnet
... Si el error persiste: -lresolv
.