Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

WinSock Frage

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 20.01.2009, 16:14    Titel: WinSock Frage Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 20.01.2009, 18:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz