Umsetzung von UDP-sockets mit select in C

Ich bin Implementierung einer socket-Programmierung-Projekt in C. ich bin mit select() für das warten auf Daten vom client. Ich habe zwei UDP-sockets und select() immer ignorieren eine meiner Steckdosen.

Kann jemand kurz beschreiben, wo soll ich anfangen suchen? Dies ist, was mein server macht

waitThreshold.tv_sec = 5000; 
waitThreshold.tv_usec = 50; 
if (sd > sd1)
    max_sd = (sd + 1);
else if(sd1 > sd)   
    max_sd = (sd1 + 1);
FD_ZERO(&read_sds); 
FD_SET(sd, &read_sds); 
FD_SET(sd1, &read_sds);   

ret = select(max_sd, &read_sds, NULL, NULL, &waitThreshold); 
if (ret < 0) {
    printf("\nSelect thrown an exception\n");   
    return 0;
} else if (FD_ISSET(sd, &read_sds)) { 
    //code for socket one 
} else if (FD_ISSET(sd1, &read_sds)) {
    //code for socket two 
}
  • Ein Loch in der Socke... Oh warte, Nein, es ist eine Steckdose.
  • Es gibt nicht wirklich genug Informationen hier für jedermann zu wissen, was du falsch machst. Sehen Sie, ob Sie ein minimal-Beispiel und poste den code. Sind Sie auf der addition der beiden buchsen, um die entsprechenden fd_sets? Ist der erste parameter von select() auf den höchsten Wert Datei-Deskriptor plus eins?
  • Ja, es ist eingestellt auf " höchste plus eins. Werde ich Bearbeiten und veröffentlichen einige von mycode hier, ich konnte nicht herausfinden, wie viel und was zu posten weil das ein großes Projekt
  • Ich habe code in meiner Frage, irgendwelche Kommentare?? @svk stackoverflow.com/users/2151753/svk
  • Soweit ich sehen kann, dass der code sieht gut aus. Sie brauchen nicht die else-Klauseln -- haben Sie vielleicht Daten auf sd-und sd1-aber ich glaube nicht, dass sollte ein problem sein, es sei denn, du bist immer völlig überflutet mit Daten, die auf der ersten Buchse. Das problem ist vielleicht nicht in diesem Teil des Codes. Sehen Sie, wenn Sie können machen Sie ein kleines Beispiel, das dein problem und vollständig ist, so kann es kompiliert und ausgeführt werden.
  • Ich fand die Lösung für mein problem. Ich hielt diesen, wenn Neubauten in der while(1) Schleife. In jeder iteration, habe ich auf FD-NULL und FD_SET diese readfds. Ich wusste, dass außen zwar so, jedes mal war es nur eine Buchse, wie seine entsprechende bit war immer gesetzt. Vielen Dank für Ihre Antwort.
  • Statt der else/if's, sollten Sie die Schleife über die read_sds gesetzt. Derzeit sind Sie mit select() einmal für jeden lese-Aktion, die Sie nehmen, das ist verschwenderisch: Sie sollten es einmal und verarbeiten die lese-Aktionen. Zumindest, loszuwerden, die elses.
  • mögliche Duplikate von UDP-sockets verwenden von select()

InformationsquelleAutor Shreyas Kale | 2013-03-23
Schreibe einen Kommentar