Forum: PC-Programmierung Socket Error 10014


von Gast (Gast)


Lesenswert?

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;
    }
}

}

von Klaus W. (mfgkw)


Lesenswert?

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)?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Gast schrieb:
> "bad adress" sagt nämlich nicht wirklich viel aus.
- (Software)Firewall
- Netzwerkproblem
- DNS Problem

von Klaus W. (mfgkw)


Lesenswert?

"Netzwerkproblem" im weitesten Sinne trifft es wohl... :-)
Damit ist die Antwort erstens richtig, und zweitens so genau
wie es die Frage war.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ihr Scherzkekse ;) Mal davon abgesehen, dass der Sourcecode irgendwie 
russisch aussieht.

von Gast (Gast)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

naja, dann wie immer in Zeile 42.
Gute Nacht!

von Gast (Gast)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.