Socket schließen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sn0000py
User
Beiträge: 6
Registriert: Donnerstag 14. Mai 2015, 07:32

so mein nächstes problemchen ...

Ich reagier auf das SIGNAL SIGTERM

und möchte den server samt connecteten Client in einem Thread schließen
er schreibt mir auch hin, das er es macht, allerings starte ich das script dann erneut, dann bekomme ich die meldung das

Hauptprogramm

Code: Alles auswählen

		conn.shutdown(2)
		conn.close()
		s.shutdown(2)
		s.close()
Thread

Code: Alles auswählen

	while not doKill:
		try:
			print 'Accepting ...'
			conn, addr = s.accept()
			print 'Connected with ' + addr[0] + ':' + str(addr[1])
			while not doKill:
				data = conn.recv(BUFF)
			print 'Closing Client'
			conn.close()
		except socket.error, msg:
			print "Socket error! %s" % msg
			break
		except:
			print 'Excepting all ....'
			break
	print 'Closeing Server'
	s.close()	
Das ist die Fehlermeldung wenn ich versuche das script erneut zu starten

Code: Alles auswählen

Socket created
Bind failed. Error Code : 98 Message Address already in use
BlackJack

@sn0000py: Du hast dem Betriebssystem auch gesagt das das Socket sofort von anderen Prozessen wiederverwendet werden darf? Ansonsten hält nämlich normalerweise das Betriebssystem noch eine Weile die Finger auf einem Socket.
sn0000py
User
Beiträge: 6
Registriert: Donnerstag 14. Mai 2015, 07:32

ähm, nein ... wie sage ich es dem system das es den socket freigeben soll wenn ich das script schließe?

Finde bzw weiss nicht genau was nach ich suchen soll ...
sn0000py
User
Beiträge: 6
Registriert: Donnerstag 14. Mai 2015, 07:32

oh glaub gefunden :D

Code: Alles auswählen

	s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Das Betriebssystem lässt den Socket übrigens nicht ganz grundlos offen, dass sollte man normalerweise nicht einfach ohne guten Grund überschreiben.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@DasIch: und welchen guten Grund sollte es geben, das nicht zu machen.
sn0000py
User
Beiträge: 6
Registriert: Donnerstag 14. Mai 2015, 07:32

Ja?

Also ich mache es nun so weil ich einen Daemon habe, den ich halt gerade im anfangsstadium noch öfters ändere und den halt mit /stop und /start neu starte
und wenn ich dann nicht lange warte, da schlägt das start fehl.
Antworten