send/recv unter Windows 7 (64 Bit) - seltsames Verhalten [gelöst]
-
@hustbaer: Vielen Dank für deine Tips.
Mit kleineren send() und recv() hab ich es schon versucht, das funktioniert. Aber das macht die Sache glaub nicht sicherer, sondern nur unwahrscheinlicher dass der Fehlerfall auftritt.
Ich melde mich falls ich was herausgefunden habe.
EDIT: Das Benutzern der IP 127.0.0.1 bzw. die Debug-Variante lösen das Problem auch nicht.
-
Probier mal die neuste WINSOCK Version zu initialisieren.
ws2_32.lib
WSADATA iws; if( WSAStartup(MAKEWORD(2,2), &iws) != 0 ) { printf("\nWSAStartup() error : %i\n",WSAGetLastError()); return 1; }
-
@-lowbyte- : Danke für den Tip. Hat aber leider auch nicht geholfen. Aus dem Microsoft Forum hab ich auch noch keine Antwort
-
Ich habe die Ursache gefunden: Wenn ich meine Firewall "ZoneAlarm" deaktiviere, dann funktioniert alles. Wenn die Firewall eingeschaltet ist, dann kommen die Paktete in der falschen Reihenfolge.
Mein PC befindet sich in der "sicheren Zone", auch meine IP habe ich explizit als "sichere Zone" angegeben. Außerdem beantworte ich alle Anfragen, die beim Start eines neu kompilierten Servers bzw. Clients auftauchen, mit "zulassen".
Wenn gar keine Daten durchkommnen würden, dann hätte ich ja noch Verständnis dafür aber sowas???
Von daher: keine Ahnung was das soll. Vielleicht lässt sich da was in der kommerziellen Version was entsprechendes einstellen, aber bei der Freeware-Version von ZoneAlarm wohl nicht. Ich kann von einem Kunden aber nicht verlangen solche Einstellungen vorzunehmen oder sich die kommerzielle Version zu kaufen. Ich wüsste nicht was ich als Programmierer machen kann damit es in jedem Fall funktioniert.
Danke an alle für eure Hilfe!
-
Ich denke man kann vom Kunden verlangen, dass er sich so einen Quatsch wie ZoneAlarm nicht installiert. :p
-
Na das ist ja mal interessant
SchlechterInformatiker schrieb:
Von daher: keine Ahnung was das soll.
Naja, ganz einfach. Entweder ZoneAlarm ist verbuggt, oder Windows' Interface zu Desktop-Firewalls ist verbuggt.
Welches von beiden kannst du einfach ausprobieren: installiere eine andere (nicht-Microsoft) Desktop-Firewall. Spontan fällt mir da die Comodo Personal Firewall als Kandidat ein, die gibt's AFAIK immer noch in einer gratis Version.
Wenn du mit der das selbe Problem hast, dann liegt der Verdacht nahe dass Windows hier nen Bug haben könnte. In dem Fall solltest du das an MS reporten, bzw. in deinem MSDN Forum Thread darauf hinweisen.Wenn es aber mit einer anderen Desktop-Firewall geht, liegt es fast sicher an ZoneAlarm. Dann solltest du den Bug an CheckPoint (ZoneAlarm) melden.
Bzw. selbst wenn es mit verschiedenen Desktop-Firewalls passiert, könntest du mal die Hersteller dieser anschreiben. Wenn es wirklich ein MS Bug sein sollte, dann ist da mehr Druck dahinter, wenn eine Firma wie Comodo oder CheckPoint bei MS nachfragt was das soll
SchlechterInformatiker schrieb:
(...) Ich kann von einem Kunden aber nicht verlangen solche Einstellungen vorzunehmen oder sich die kommerzielle Version zu kaufen. Ich wüsste nicht was ich als Programmierer machen kann damit es in jedem Fall funktioniert.
Du kannst einen "Known Issues" Bereich im Readme machen, und da reinschreiben dass das Dinge mit Version so-und-so von ZoneAlarm Probleme macht.
Ansonsten kannst du eins machen, was vermutlich sehr hohe Erfolgschancen hat: zerteile grosse send/recv Aufrufe in mehrere kleinere. Ermittle die Grenze ab der es schief geht, runde auf Zweierpotenz ab, und nimm dann 1/4 davon - oder so.
Vermutlich sehr hohe Erfolgschancen deswegen, weil...: wenn das mit allen/vielen Anwendungen auftreten würde, wäre der Fehler längst tausendfach aufgefallen, und sicher schon längt behoben. Und das einzig "spezielle" was deine Programme machen, ist ziemlich grosse Datenstücke mit einem einzigen send/recv Aufruf zu versenden/empfangen. Daher vermute ich, dass das Problem bei kleineren Blöcken einfach nicht auftritt, und das auch der Grund ist warum es bisher noch nicht aufgefallen ist/nicht behoben wurde.
-
cooky451 schrieb:
Ich denke man kann vom Kunden verlangen, dass er sich so einen Quatsch wie ZoneAlarm nicht installiert. :p
100 Punkte. Denn da ist mehr verbuggt als man denkt!
-
@hustbaer: Also ich habe jetzt mal bei mir ZoneAlarm deinstalliert und COMODO installiert. Mit COMODO funktionierts. Ich habe gesehen, dass beim allerersten Start meines Clients mehrere recv() Aufrufe stattgefunden haben obwohl der Server nur ein send() machen musste. Das lag wohl daran dass ich erst ein paar mal auf "zulassen" klicken musste. Die Pakete sind aber in der richtigen Reihenfolge empfangen worden!!! So wie es sein soll, alles wunderbar.
hustbaer schrieb:
Du kannst einen "Known Issues" Bereich im Readme machen, und da reinschreiben dass das Dinge mit Version so-und-so von ZoneAlarm Probleme macht.
In welchem Forum? Hier oder bei MSDN oder bei CheckPoint?
Habs mit ZoneAlarm auch mal unter Windows7-32-Bit versucht. Da funktioniert es wieder. Und mit kleineren Paketen hab ich es schon mal versucht, das klappt auch. Nur die genaue Grenze weiß ich nicht.
Es kommt scheinbar alles zusammen. ZoneAlarm bei Win7-64-Bit, zu große Pakete und Sender/Empfänger lokal auf demselben Rechner. Da glaub ich auch dass das nicht oft vorkommt bzw. auffällt.
So oder so, ich werds mal an CheckPoint melden.
Danke!
-
SchlechterInformatiker schrieb:
hustbaer schrieb:
Du kannst einen "Known Issues" Bereich im Readme machen, und da reinschreiben dass das Dinge mit Version so-und-so von ZoneAlarm Probleme macht.
In welchem Forum? Hier oder bei MSDN oder bei CheckPoint?
Forum?
Readme.txt, nix Forum
-
Achso in der Readme.txt. Hab ich überlesen