Estoy intentando escribir un servidor UDP en C (en Linux). Sé que en la función socket()
debo usar SOCK_DGRAM
y no SOCK_STREAM
.¿Cómo crear un servidor UDP en C?
if ((list_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
{
fprintf(stderr, "ERROR");
}
Pero ahora, cuando trato de ejecutar el programa (no hay errores en la compilación), se dice que hay un error en listen()
. Aquí está la llamada:
if (listen(list_s, 5) < 0)
{
fprintf(stderr, "ERROR IN LISTEN");
exit(EXIT_FAILURE);
}
¿Puedes averiguar cuál es el problema? Este es el código:
int list_s; /* listening socket */
int conn_s; /* connection socket */
short int port; /* port number */
struct sockaddr_in servaddr; /* socket address structure */
if ((list_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
{
fprintf(stderr, "ERROR\n");
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port);
if (bind(list_s, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
{
fprintf(stderr, "ERROR IN BIND \n");
}
if (listen(list_s, 5) < 0) // AL POSTO DI 5 LISTENQ
{
fprintf(stderr, "ERROR IN LISTEN\n");
exit(EXIT_FAILURE);
}
Como observación general, muchas funciones darán más información sobre el error que se produjo a través de errno. Siempre es conveniente verificar (y registrar) errno, ver también strerror. – fvu
Fuera de tema: '//' los comentarios están permitidos en C++ pero no en C ... –
@EitanT son parte de C99 – fvu