bind(): Address already in use ?

Post Reply
Message
Author
marobu

bind(): Address already in use ?

#1 Post by marobu »

Hallo,

Ich habe einen Server, welche Nachricht von/an anderen Nutzer empfangen/senden kann, gestartet.
nun möchte ich den Server beenden bzw neu starten, bekomme ich diese Meldung:
bind(): Address already in use
Was ist das zu bedeuten ?

danke im voraus.

Jochen

Re: bind(): Address already in use ?

#2 Post by Jochen »

Eine Software, die im Netz auf Clientanfragen lauscht, muss sich an einen den Clients bekannten Port binden. Webserver findet man typischerweise an Port 80, MTAs an Port 25, den sshd an Port 22 usw. Ist aber bereits ein anderer Prozess an den gewünschten Port gebunden, schlägt der bind()-Aufruf mit der o.a. Meldung fehl.

Prüfe mal mittels "netstat -lp", an welchen Ports welche Prozesse lauschen. Ich tippe einfach mal,m dass der Serer zum Schliessen ein bisschen Zeit braucht und daher die zweite, neu gestartete Instanz noch die erste am gewünschten Port vorfindet. Vielleicht reicht ein "sleep 5" zwischen den Stop-/Start-Komandos?

Jochen

marobu

Re: bind(): Address already in use ?

#3 Post by marobu »

Danke fuer den Tip.
Der Server startet beim ersten mal ohne Fehlermeldung.
beim zweiten mal ja, vieleicht ist der Port schon benutzt ist.
Aber mit ps laesst sich nicht sehen dass er gestartet ist.

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: bind(): Address already in use ?

#4 Post by hjb »

Hi,

dann gibt es wohl noch eine Verbindung, die nicht vollständig abgebaut wurde. Verwende die Socket-Option SO_REUSEADDR:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">getsockopt(s, SOL_SOCKET, SO_REUSEADDR, &arg, &len);
arg = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &arg, len);
</font><hr></pre></blockquote>

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

Post Reply