Python, stopping windows service (Unbind from socket) -


i have simple syslog receiver starts windows service. service starts fine... can't stop when hit "stop service". i'm sure it's because i'm bound socket. however, can't figure out how un-bind socket svcstop function. have ideas?

output_log_file = 'c:\temp\output.log' host = "192.168.x.x" port = 514 import socketserver import pythoncom import win32serviceutil import win32service import win32event import servicemanager import socket  class appserversvc (win32serviceutil.serviceframework):     _svc_name_ = "simple syslog receiver"     _svc_display_name_ = "simple syslog receiver"     server = ""      def __init__(self, args):         win32serviceutil.serviceframework.__init__(self, args)         self.hwaitstop = win32event.createevent(none, 0, 0, none)         socket.setdefaulttimeout(60)      def svcstop(self):         self.reportservicestatus(win32service.service_stop_pending)         win32event.setevent(self.hwaitstop)      def svcdorun(self):         servicemanager.logmsg(servicemanager.eventlog_information_type,                               servicemanager.pys_service_started,                               (self._svc_name_,''))         self.main()      def main(self):         try:             global server             server = socketserver.udpserver((host, port), syslogudphandler)             server.serve_forever(poll_interval=0.5)         except (ioerror, systemexit):             raise         pass    class syslogudphandler(socketserver.baserequesthandler):      def handle(self):         data = bytes.decode(self.request[0].strip())          open(output_log_file, 'w+') outputfile:             outputfile.write(str(data))         outputfile.close()  if __name__ == "__main__":     win32serviceutil.handlecommandline(appserversvc) 

same problem on windows 7 + virtualbox.

the solution have remove particular port being forwarded in virtualbox, or use new port.

even standard socket server code basic example has feature: 1. runs forever 2. can not see in windows processes 3. not "because bounded socket" continues replay properly, although python application closed.

    import socket      tcp_ip = '127.0.0.1'     tcp_port = 80     buffer_size = 20       s = socket.socket(socket.af_inet, socket.sock_stream)     s.bind((tcp_ip, tcp_port))     s.listen(1)      conn, addr = s.accept()     print 'connection address:', addr     while 1:         data = conn.recv(buffer_size)         if not data: break         print "received data:", data         conn.send(data)  # echo      conn.close()     s.close()     raw_input()