Error al recibir en UDP: conexión rechazada

Estoy tratando de enviar una cadena HI a un servidor a través de UDP en un puerto particular y luego recibir una respuesta. Sin embargo, después de que intenté obtener la respuesta utilizando recvfrom (), me quedé atascado en estado de locking. Intenté usar UDP conectado pero obtuve:

Error al recibir en UDP: conexión rechazada

¿Cuáles podrían ser las razones de esto? El servidor no está bajo mi control, pero sé que funciona bien.

He añadido el codigo

int sockfdudp; char bufudp[MAXDATASIZE], port[6]; struct addrinfo hints, *servinfo, *p; struct sockaddr_storage addr; int rv; char s[INET6_ADDRSTRLEN]; int bytes_recv, bytes_sent; socklen_t len; scanf("%s",port); printf("UDP Port: %s \n", port); // Start connecting to datagram server memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; if ((rv = getaddrinfo(SERVER_NAME, port, &hints, &servinfo)) != 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return 1; } // loop through all the results and make a socket for(p = servinfo; p != NULL; p = p->ai_next) { if ((sockfdudp = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { perror("Creating datagram socket"); continue; } if (connect(sockfdudp, p->ai_addr, p->ai_addrlen) == -1) { close(sockfdudp); perror("Connecting stream socket"); continue; } break; } if (p == NULL) { fprintf(stderr, "ClientUDP: failed to bind socket\n"); return 2; } freeaddrinfo(servinfo); if ((bytes_sent = sendto(sockfdudp, UDP_MSG, strlen(UDP_MSG), 0, p->ai_addr, p->ai_addrlen)) == -1) { perror("ClientUDP: Error sending data"); exit(1); } printf("Data %s sent\n", UDP_MSG ); len = sizeof(struct sockaddr_storage); if ((bytes_recv = recvfrom(sockfdudp, bufudp, MAXDATASIZE-1, 0,(struct sockaddr*)&addr, &len)) == -1) { perror("Error receiving in UDP"); exit(1); } printf("Bytes recv %d\n", bytes_recv); bufudp[bytes_recv] = '\0'; printf("ClientUDP: Received\n %s \n",bufudp ); close(sockfdudp); return 0; 

Es probable que esté enviando algo a un servidor que no escucha en ese puerto en particular. Eso provocaría que se devuelva un mensaje icmp, y su próximo reconocimiento devolverá un error en el caso de que conecte el zócalo.

Verifique con tcpdump o wireshark lo que sucede en el cable.

Supongo que su dirección IP es mala de alguna manera, o el puerto ya está en uso de alguna manera. UDP no tiene conexión, por lo que realmente no hay ninguna “conexión” para fallar.