Hallo, hab ein seltsames Problem. Ich bekomme bei meinem Programm auf einem Rechner nach 2 Minuten (sind immer exakt 2 Minuten) den Socketfehler 10014. Auf einem anderen Rechner (beide xp) funktioniert das Programm aber. Weiss zufällig einer, was die Ursache sein könnte. "bad adress" sagt nämlich nicht wirklich viel aus. Der Fehler tritt in meiner recvfrom-Funktion auf. Nachfolgend ist der Quelltext aufgeführt. Danke schon mal if (status==1) { long byt = recvfrom(s,data,buf,0,(SOCKADDR*)&remoteAddr,&remoteAddrLen); if(byt==SOCKET_ERROR) { static char er[]="FAULT1"; error=WSAGetLastError(); return er; } else { data[byt]='\0'; return data; } } else { if (status==SOCKET_ERROR) { static char xt[]="FAULT2"; error=WSAGetLastError(); return xt; } else { static char xp[]="NODATA"; return xp; } } }
Bei der genauen Beschreibung und dem ausführlichen Quelltext ein Leichtes... --- Passiert in den zwei Minuten etwas, also wird wirklich etwas übertragen, oder schweigen sich die beiden Programme in der Zwischenzeit an? Es ist jeweils nur ein Rechner, auf dem Client und Server laufen? Und wie sehen die Quelltexte aus (am besten auf ein sinnvolles Maß reduziert, das den Fehler gerade noch zeigt)?
Gast schrieb:
> "bad adress" sagt nämlich nicht wirklich viel aus.
- (Software)Firewall
- Netzwerkproblem
- DNS Problem
"Netzwerkproblem" im weitesten Sinne trifft es wohl... :-) Damit ist die Antwort erstens richtig, und zweitens so genau wie es die Frage war.
Ihr Scherzkekse ;) Mal davon abgesehen, dass der Sourcecode irgendwie russisch aussieht.
Danke erst ma für eure schnellen Anworten. 1. Server und Client laufen jeweils auf einem extra Rechner. 2. Firewall ist abgeschaltet 3. Daten werden bis zu den besagten 2 Minuten ständig übertragen(Polling). 4. Das Server-Programm läuft auf einem anderen NoteBook einwandfrei. 5. beide Rechner sind nur über ein Ethernetkabel verbunden. IP-Adressen fest vergeben. Mehr sind nicht im Netz. Das Programm hört eben einfach nur auf nach 2 Minuten.
Hab jetzt ma wieder eine Vermutung. Mein Programm hat irgendwie ein Speicherleck. Kann es sein, wenn ich die recv-Funktion ständig aufrufe, dass der Buffer da nicht überschrieben wird ,sondern immer ein neuer Speicherbereich angelegt wird. Wäre sehr nett das zu wissen.
recvfrom nimmt den Speicher, den man ihm übergibt. Wo der herkommt, steht im Quelltext, den hier niemand kennt.... Was bei dir buf heisst, muss übrigens die Länge sein. Komischer Name dafür.
hab die Lösung. Das Problem war, dass ich für die empfangenen Daten pro Schleifendurchlauf jedesmal mit der Funktion malloc Speicherbereich reserviert habe -> viele Daten -> viel Speicherplatz. Ich dachte, dass das jedesmal überschrieben wurde. Dem ist nicht so - wieder etwas gelernt. Trotzdem danke für eure Hilfe.
Gast schrieb: > hab die Lösung. Das Problem war, dass ich für die empfangenen Daten pro > Schleifendurchlauf jedesmal mit der Funktion malloc Speicherbereich > reserviert habe Und lass mich raten: Kein Mensch hat den Returnwert von malloc daraufhin überprüft, ob ds ev. ein NULL Pointer ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.