10093 bei Nutzung von select mit WIN-Sockets
-
aber ich erstelle, wie man sieht, auch kein socket innerhalb eines eigenen tasks, sondern in meiner klasse. das serversocket ist ein member, und das client socket ist in der funktion. das einzige was bei mir unter windows in einem thread läuft ist mein konsoleneingabe mit cin>>
-
Ich meinte damit, dass du evtl einen ungültigen Socket irgendwo da drin hast. Und zufällig wurde ein Socket mit genau diesem Handle-Wert in irgendeinem anderen Prozess erstellt. Oder so. Jedenfalls ist ja unzweifelhaft irgendwo der Wurm drin.
Sonst zeig mal mehr Code, da kann ich jetzt wirklich nichts kaputtes entdecken. Nur der cast des Server-Sockets zum "unsigned int" ist merkwürdig, sollte nicht nötig sein.
-
Socketer schrieb:
Btw: Greatest->Großartigster. Nimm Highest oder so.
Deswegen sagt man ja auch Highest Common Divisor, oder wie
http://en.wikipedia.org/wiki/Greatest_common_divisor
-
nfds is the highest-numbered file descriptor
-
@the great fd:
Falls das falsch ankam: ich wollte damit nicht behaupten dass "highest" in diesem Fall nicht besser wäre. Ich denke nämlich auch dass "highest" hier besser passt. Nur dass "greatest" eben nicht falsch ist.
-
Danke für die Berichtigung, ich kannte "greatest" echt nur als "Großartigster". War mir da wohl zu sicher.
dgrat_2, hast du noch Interesse an Hilfe?
-
ich würde sehr gerne noch hilfe in anspruch nehmen, da ich ehrlich gesagt keine ahnung habe warum das ganze im detail nicht unter window läuft.
ich hatte grade ne eingebung und weis was schief gelaufen ist. ich habe im destruktor von einem socket wsa_cleanup aufgerufen. das gilt dann aber leider für alle sockets ):
-
Hm, komische Sache. Ich hatte WSANOTINITIALISED (10093) eigentlich immer nur wenn WSAStartup() nicht oder nicht erfolgreich aufgerufen wurde.
Socketer schrieb:
Zu Fehler 10093 gehört auch:
The application may be accessing a socket that the current active task does not own (that is, trying to share a socket between tasks)
Ich frage mich was hier mit "task" gemeint ist. WSAStartup() gilt auf jeden Fall Prozessweit, das muss man nicht wie CoInitialize() o.ä. pro Thread wiederholen.
Möglicherweise ein Überbleibsel aus alten Tagen? (Hiessen Prozesse unter Windows vielleicht mal Tasks -- zu Zeiten vor Win32 vielleicht?)@dgrat_2:
Wie schon gesagt, ich hatte WSANOTINITIALISED noch nie mit erfolgreichem WSAStartup(). Von daher ... prüf das nochmal nach. Step im Debugger durch, oder gibt alle möglichen Werte aus (printf). Inklusive Returnwert von WSAStartup, und auch die Werte aller Socket-Descriptoren. Und mach auch nen Breakpoint bzw. ne TRACE()/printf() Ausgabe zu jedem WSACleanup() Aufruf in deinem Programm...
-
also, der fehler war, dass ich in meiner eigenen socket classe den wsa-socket thread beendet habe und das dann für alle sockets in meinem programm gilt. das programm läuft nun auch unter windows wie vorgesehen.
allerdings finde ich den weg, wie windows sockets behandelt irgendwie nicht so gut wie unter linux, wo man alle filedescriptoren wie sockets oder umgekehrt behandelt. außerdem muss man da auch keine kryptischen prozesse starten wo keiner weis was die machen.
-
dgrat_2 schrieb:
allerdings finde ich den weg, wie windows sockets behandelt irgendwie nicht so gut wie unter linux, wo man alle filedescriptoren wie sockets oder umgekehrt behandelt.
Aha.
außerdem muss man da auch keine kryptischen prozesse starten wo keiner weis was die machen.
Was für "kryptischen Prozesse" meinst du bitte?