2010-07-06 11 views
7

Beim Aufrufen von Socket.Select mit Listen, die überprüft werden, nur Socket-Objekte enthalten, erhalte ich manchmal den Fehler An operation was attempted on something that is not a socket. Ich kann kein Muster für das Auftreten finden.Socket.Select gibt den Fehler "Eine Operation wurde auf etwas versucht, das kein Socket ist"

Socket.Select(readList, writeList, null, timeOut > 0 ? timeOut : 0); 
+0

Auf jeden Fall Umwelt, jagen die KB-Artikel. –

+4

Dies ist der coolste Fehler, den ich diesen Monat gesehen habe. Es braucht eine Menge Demut für einen Computer zuzugeben, dass er einfach nicht weiß, was vor sich geht. –

+0

Ich habe gerade dieses Problem "in meinem Fall" gelöst, indem ich das Programm mit Administratorrechten ausführte. – LikePod

Antwort

7

Es stellt sich heraus, dass die Buchsen geschlossen waren. Das ist ein wirklich dummer Fehler für .NET zu generieren, nur wegen eines geschlossenen Sockets.

+3

Ist das nicht ein Sicherheitsproblem? Die Socket-Klasse hat scheinbar systemeigene Aufrufe auf einem geschlossenen Handle ausgeführt! Das ist ein Griff-Recycling-Angriff. – usr

+0

Ich habe dies "plötzlich" mit einer App, die oft nicht verbinden, weil ich den Kontakt mit dem Handheld verloren habe. Ich "setze" den Handheld in seine Halterung, er wird vom Desktop wieder "gesehen", und alles ist gut - außer für diese Zeit, als ich das bekam "Eine Operation wurde auf etwas versucht, das kein Sockel ist" -Fehler. –

+0

Abschluss des Projekts und VS 2008 und Wiedereröffnung machte es weg. Vom Vater verbrannte Schädlinge! Ich meine Gremlins! –

2

Ich habe eine Suche auf MSDN und bekam ein paar Treffer. here & here

sehen Aber ich habe nichts in WinSock entwickeln, sondern auf Unix dem Weg Select implementiert wird, erfordert die fd_set jedes Mal Select kehrt zurückzusetzen. Vielleicht gilt das Gleiche auch für die WinSock-Implementierung von Select. Wenn dies der Fall ist, kann Ihr readList, writeList möglicherweise beschädigt nach Select zurückgegeben, was zu dem Fehler führt, den Sie erwähnten. Nur ein Gedanke.

+0

Gute Gedanken, aber wir initialisieren die Listen vor jedem Aufruf von 'Select'. Trotzdem danke. –

+0

oh..und die MSDN-Links zeigen auch nicht auf eine Art von Situation, die Sie möglicherweise haben? –

+0

Nein, tut mir leid. Trotzdem danke. –

0

Ich habe dieses Problem, wenn meine Host-Maschine Firewall eingeschaltet ist. Ich kann nicht meine Firewall aufgrund meiner Unternehmensregeln deaktivieren. Also habe ich eingehende Regeln in meinem Host-Rechner für die Kommunikation hinzugefügt, danach funktioniert es gut.

Verwandte Themen