Wie erhalten Sie beim Senden eines UDP-Pakets den vom System zugewiesenen ausgehenden Port zurück? Nachdem ich das unten stehende Paket gesendet habe, muss ich mich sofort an den zufälligen Port, den er für mich ausgewählt hat, binden und diesen abhören, um Antworten auf meinen Broadcast zu erhalten.
// Open a socket
int sd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
// Enable broadcast
int broadcastEnable=1;
setsockopt(sd, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
// Configure the port and ip we want to send to
struct sockaddr_in broadcastAddr; // Make an endpoint
memset(&broadcastAddr, 0, sizeof(broadcastAddr));
broadcastAddr.sin_family = AF_INET;
inet_pton(AF_INET, "239.255.255.250", &broadcastAddr.sin_addr); // Set the broadcast IP address
broadcastAddr.sin_port = htons(1900); // Set port 1900
// Send it
char *request = "M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\nMX:1\r\n\r\n";
sendto(sd, request, strlen(request), 0, (struct sockaddr*)&broadcastAddr, sizeof(broadcastAddr));
close(sd);