www.mikrocontroller.net

Forum: PC-Programmierung Socket Error 10014


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
    }
}

}

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr Scherzkekse ;) Mal davon abgesehen, dass der Sourcecode irgendwie 
russisch aussieht.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, dann wie immer in Zeile 42.
Gute Nacht!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.