Machen recvfrom () - Funktion, non-blocking

Arbeite ich an einem UDP-server/client-Anwendung.

Um herauszufinden, ob irgendwelche der client ausgefallen ist, sendet der server ein handshake-Nachricht an den client. Dann wartet der server auf die Antwort des client, um Daten zu senden, um sicherzustellen, dass der client aktiv ist. Für dieses blockiert der server in call to recvfrom() es sei denn, der Kunde Antworten zurück, aber wenn der client heruntergefahren ist, blockiert der server stufenlos in call to recvfrom().

Ich soll die Implementierung einer solchen Funktionalität auf meinem server so, dass es wartet, in den Ruf zu recvfrom() für eine bestimmte Zeit (sagen wir 2 Sek.). Wenn keine Daten vom client empfangen werden, innerhalb von 2 Sekunden der client ist als tot zu sein und recvfrom() gibt.

Gibt es eine Möglichkeit, es zu tun? Ich durchsuchte das internet, fand aber Lösungen wie die Einstellung MSG_DONTWAIT flag, das gibt sofort einen Wert zurück, wenn keine Daten empfangen wurden, aber in meinem Fall, will ich nicht recvfrom() sofort wieder zurück, sondern warten Sie, bis die Daten für eine bestimmte Zeitdauer, und, wenn keine Daten empfangen, für eine bestimmte Dauer, die recvfrom() Funktion zurückkehren sollte.

  • Ok, Sie will die Implementierung zuverlässiger service. Sie können recvfrom () - Funktion im blockierenden Modus, mit fcntl() oder ioctl () - Funktion. Lesen Sie auch das UDP-zuverlässige Daten-service-Implementierung
  • checkout c - Set timeout für winsock-recvfrom - Stack Overflow
  • auch check out .es gibt Ihnen klare Erklärung in Sie wsarecv() (hat blockiert Regeln für die Funktion).
  • Es ist ioctlsocket, für Windows. Etwas lahm und nicht Unix-like, aber sockets nicht behandelt wie normale Dateien...
  • ok, ich habe nicht bemerkt window tag. Eh @ Ayesha muss Es einige ähnliche Weise in windows auch. Sorry das ich nicht helfen kann auf dieser mehr...viel Glück
  • Was ist mit select() nachdem Sie geschrieben auf dem client getestet werden. select() nimmt optional eine time-out.
  • Danke an alle für all die hilfreichen Beiträge 🙂

InformationsquelleAutor Ayse | 2013-04-11
Schreibe einen Kommentar