 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 20.01.2009, 16:14 Titel: WinSock Frage |
|
|
Hallo!
Wie kann ich denn WinSock Befehl "Accept" abbrechen?
Denn wenn man einmal Accept aufgerufen hat, bleibt das Programm solange stehen, bis Accept einen Clienten gefunden hat. Ich möchte das jedoch nur auf z.b. 5 Sekunden beschränken, also das er nach 5 Sekunden abbricht.
Geht soetwas? |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 20.01.2009, 18:05 Titel: |
|
|
Zumindest in unixodien Betriebssystemen üblich: Beim bind()-en eines Listening Ports bekommt man einen Socket Descriptor (vom Verhalten einem File Descriptor ebenbürtig!) zurück.
Das accept() musst Du dort wie eine fread()-Operation betrachten. Das heisst: Um Non Blocking I/O zu ermöglichen, musst Du den Prozess mit select() schlafen legen, bis an einer der File Handles Daten anliegen. Wichtig bei einer interaktiven Anwendung (Serverprogramme werden normalerweise als Dienst implementiert, der also bereits vor der Benutzeranmeldung bereits läuft): Auch Tastatur und Maus sind Eingabeströme, deren File Handles genauso in diesen select()-Aufruf hineingenommen werden können (und sogar müssen!), damit auch dieses Ereignis verarbeitet werden kann.
Musterbeispiel von mir: Rasterbike-Server, dort am besten einen Blick in den C-Quellcode des Servers werfen. Bestimmt steht in FreeBasic dieses BSD-Socket-API in praktisch gleichwertiger Form ebenfalls zur Verfügung!
Zum Timeout: Dies ist bei select() ein Parameter (im Rasterbike-Server übrigens aktiv verwendet, z.B. dort sämtliche Mofas um einen Schritt vorwärtsbewegen) und aus Sicht vom Betriebssystem einfach ein alternatives Prozessaufweck-Ereignis. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|