Seite 1 von 1

Socket schließen

Verfasst: Donnerstag 14. Mai 2015, 15:25
von sn0000py
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

Re: Socket schließen

Verfasst: Donnerstag 14. Mai 2015, 15:54
von 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.

Re: Socket schließen

Verfasst: Donnerstag 14. Mai 2015, 16:34
von sn0000py
ä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 ...

Re: Socket schließen

Verfasst: Donnerstag 14. Mai 2015, 17:50
von sn0000py
oh glaub gefunden :D

Code: Alles auswählen

	s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

Re: Socket schließen

Verfasst: Freitag 15. Mai 2015, 15:26
von DasIch
Das Betriebssystem lässt den Socket übrigens nicht ganz grundlos offen, dass sollte man normalerweise nicht einfach ohne guten Grund überschreiben.

Re: Socket schließen

Verfasst: Freitag 15. Mai 2015, 16:08
von Sirius3
@DasIch: und welchen guten Grund sollte es geben, das nicht zu machen.

Re: Socket schließen

Verfasst: Samstag 16. Mai 2015, 07:02
von sn0000py
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.