MatzeT Geschrieben 13. April 2002 Geschrieben 13. April 2002 Hi, ich versende und empfange Daten über einen Socket. Dazu verwende ich die Funktionen send() und recv() in Visual C++. Beim Senden ist alles ok. Nur beim Empfangen "wartet sich der Server tot", weil er keinen Timeout bekommt. Weiss jemand, wo ich ihm einen Timeout setzen oder einstellen kann????
Klotzkopp Geschrieben 13. April 2002 Geschrieben 13. April 2002 Die normale Socket-API stellt keine Möglichkeit zur Verfügung, Timeouts festzulegen. Man kann sich aber z.B. mit einem weiteren Thread behelfen, der nach einer bestimmten Zeit den Socket schließt, so dass send bzw. revc mit einem Fehler zurückkommt. Es gibt auch jede Menge plattformspezifischer Lösungen, z.B. für MFC: http://fachinformatiker-world.de/forums/showthread.php?s=&threadid=19704
nic_power Geschrieben 13. April 2002 Geschrieben 13. April 2002 Da gibts zwei klassische Methoden (ich bin mir aber nicht sicher ob auch beide unter Windows laufen). Du setzt den Empfangssocket mit fcntl(2) auf "nonblocking", dann kehrt recv immer zurueck (mit dem return-Wert -1 und errno auf EAGAIN wenn keine Daten vorhanden sind). Die zweite Methode (ein select-loop) sollte auch unter Windows laufen. Du klapperst Deine Sockets mit select(2) ab, um zu ueberpruefen, ob Daten vorhanden sind. Bei select kannst Du auch einen Timeout mit angeben. Ein einfaches Beispiel habe ich nicht zur Hand, aber schau Dir doch mal die folgenden Seiten an: http://www.erlenstar.demon.co.uk/unix/faq_3.html#SEC26 http://www.lowtek.com/sockets/select.html Nic PS: Select gehoert zur socket-API und sollte daher auch unter Windows vorhanden sein.
Klotzkopp Geschrieben 13. April 2002 Geschrieben 13. April 2002 Original geschrieben von nic_power Select gehoert zur socket-API und sollte daher auch unter Windows vorhanden sein. Ist es. An select hatte ich gar nicht mehr gedacht.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden