tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
1680
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    extexo extexo ist offline Mitglied
    Registriert seit
    May 2009
    Beiträge
    23
    Hi,

    ich hab jetzt schon mehrere Apps unter Linux geschrieben die Sockets nutzen
    und bekomme nach dem Neustart des Programms auf der Serverseite immer
    wieder bei bind() einen Fehler.
    Das passiert nur wenn bereits Clientverbindungen aufgebaut worden sind.

    Ich bin mir sicher das ich penibelst genau alle Sockets wieder schließe.
    Client- und Serversockets !

    Wenn man jetzt eine Weile wartet (scheint von Distri zu Distri unterschiedlich lange zu dauern)
    dann kann man den Server wieder starten und die bind() Funktion scheint auch wieder
    fehlerfrei zu funktionieren.

    Kann mir einer erklären woran das liegt, damit ich mal verstehen kann wieso das
    so ist und wie ich am Besten dagegen vor gehen kann?

    MfG
     

  2. #2
    Anfänger92 Anfänger92 ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Ort
    Wesel (NRW)
    Beiträge
    217
    Hi,

    also ich hatte das Problem noch nicht und habe auch schon mehrmals Server geschlossen und wieder gestartet.

    Vll postest du mal nen bisschen Code?

    Gruß
    Anfänger
     
    Besucht meine Seite

    War mein Beitrag hilfreich? Dann dankt mir doch einfach ;)

  3. #3
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,
    Zitat Zitat von extexo Beitrag anzeigen
    ...
    Kann mir einer erklären woran das liegt, damit ich mal verstehen kann wieso das
    so ist und wie ich am Besten dagegen vor gehen kann?

    MfG
    wenn man bei google die Worte "address already in use" eingibt, ist das der 2. Treffer den man bekommt:
    http://hea-www.harvard.edu/~fine/Tech/addrinuse.html

    Gruß,
    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  4. #4
    Avatar von Navy
    Navy Navy ist offline Freiwillige Serverwehr
    tutorials.de Administrator
    Registriert seit
    Jul 2003
    Ort
    Montreal (Quebec)
    Beiträge
    1.666
    Der Kernel wartet auch nach dem close() noch eine gewisse Zeit auf Pakete auf dem Socket. Und das ist gut so Du könntest den Timeout runterschrauben oder gucken, ob Du den Socket wieder aufgreifen könntest.
     
    Navy

    --
    Echtzeithilfe unter irc.tutorials.de #tutorials.de

  5. #5
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,
    Zitat Zitat von Navy Beitrag anzeigen
    Der Kernel wartet auch nach dem close() noch eine gewisse Zeit auf Pakete auf dem Socket. Und das ist gut so Du könntest den Timeout runterschrauben oder gucken, ob Du den Socket wieder aufgreifen könntest.
    wie im obigen Link beschrieben kann diese Variante manchmal zu Seiteneffekten führen wenn der Timeout zu kurz gewählt wird.
    Man sollte meiner Meinung nach zuerst sicher gehen das der Client in jedem Fall auch wirklich die Verbindung zuerst schließt. Der Server bekommt dann ein EOF geschickt und muss danach (nach einer kleinen Wartefrist von 2-3 Sekunden) ebenfalls die Verbindung sauber schließen, dann sollte dieser Fehler auch nicht auftauchen.

    Gruß,
    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  6. #6
    extexo extexo ist offline Mitglied
    Registriert seit
    May 2009
    Beiträge
    23
    Zitat Zitat von RedWing Beitrag anzeigen
    Hallo,
    wenn man bei google die Worte "address already in use" eingibt, ist das der 2. Treffer den man bekommt:
    http://hea-www.harvard.edu/~fine/Tech/addrinuse.html

    Gruß,
    RedWing
    Danke für diese qualifizierte Antwort.

    Die eigentliche Lösung hieß dann aber doch:
    Code :
    1
    2
    
        int val = 1;
        setsockopt( sock_server, SOL_SOCKET, SO_REUSEADDR, &val, sizeof( val ) );
     

  7. #7
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    Zitat Zitat von extexo Beitrag anzeigen
    Danke für diese qualifizierte Antwort.

    Die eigentliche Lösung hieß dann aber doch:
    Code :
    1
    2
    
        int val = 1;
        setsockopt( sock_server, SOL_SOCKET, SO_REUSEADDR, &val, sizeof( val ) );
    ich glaube du hast den Link nur halbherzig gelesen. Denn dort steht unter anderem auch genau dieser Weg beschrieben.

    Gruß,
    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 20.08.07, 11:52
  2. Antworten: 8
    Letzter Beitrag: 09.02.06, 14:14
  3. SMTP - Recipient address rejected
    Von Anbrix im Forum Linux & Unix
    Antworten: 2
    Letzter Beitrag: 22.03.05, 13:04
  4. 530 Only client IP address allowed to connect to PASV socket
    Von sidvision im Forum Hosting & Webserver
    Antworten: 2
    Letzter Beitrag: 21.01.05, 19:25
  5. Bind Dns [8|9]
    Von lexi im Forum Netzwerke
    Antworten: 2
    Letzter Beitrag: 10.02.02, 11:34