Hi, this simple server (time protocol) does not respond after a few
hours, even when it is restarted. The behaviour looks to me like a
firewall blocking but I have desabled the firewall.
Using Netstat - a I find the server listed when it is running and not
listed when I stop it.
The server starts whith no error. But after about 6-8 hours there is no
way to make it respond again (even when it is restarted).

Once it is blocked, I killes it, wait for about 15 minutes without
running the server and then started again but this gives me the same
behaviour (no response).

The solution at this time is to reboot windows !!!

I have also tried to run it twice in order to get the exception that
the port is already used and an exeption is raised.
I have tried from another computer to connect to mine but it does not
manage.
  When I change the port in the server it responds immediatly.

I am running winXP SP2, python 2.4.

Do you have any clues ?
Thanks in advance.
Seb.

PS : I am calling this server from another program and make it run in a
thread.
Below is the standalone version (wich is adpated from effbot site).

import socket
import struct, time
import threading
import os
import appel_log2 as appel_log
import sys


class TimeServer(threading.Thread) :
        def __init__(self):
                nom_function_actuelle= str(sys._getframe().f_code.co_filename)
+"___"+str(sys._getframe().f_code.co_name)
                try :
                        threading.Thread.__init__(self)
                        self.log_file="timeserverlog.txt"
                        self.PORT=37
                        self.TIME1970=2208988800L
                        self._continue=1
                        self.time_shift=0
                        message=nom_function_actuelle+"\t "+"STARTED OK "
                        appel_log.write_log("info",message)
                except Exception, e :
                        message=nom_function_actuelle+"\t "+"PB:::"+str(e)
                        print message
                        appel_log.write_log("warning",message)

        def set_log_file(self, file):
                nom_function_actuelle= str(sys._getframe().f_code.co_filename)
+"___"+str(sys._getframe().f_code.co_name)
                if os.path.exists(file):
                        pass
                else :
                        f=open(file,"w")
                        f.close()
                self.log_file=file
                print "log file ",self.log_file
                self.log_file=file

        def reset_log_file(self):
                nom_function_actuelle= str(sys._getframe().f_code.co_filename)
+"___"+str(sys._getframe().f_code.co_name)
                print "resetting log file "
                if os.path.exists(self.log_file):
                        f=open(self.log_file,"w")
                        f.close()

        def set_time_shift(self,time_shift):
                self.time_shift=time_shift

        def run(self):
                nom_function_actuelle= str(sys._getframe().f_code.co_filename)
+"___"+str(sys._getframe().f_code.co_name)
                socket.timeout(1)
                service=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                service.bind(("", self.PORT))
                service.listen(1)
                print "listening on port", self.PORT
                while self._continue==1 :
                        channel, info = service.accept()
                        print "connection from", info
                        
message=str(time.time())+"\t"+str(time.asctime())+"\t"+str(info)+"\n"
                        g=open(self.log_file,"a")
                        g.write(message)
                        g.close()
                        t = int(time.time()) + self.TIME1970 + self.time_shift
                        t = struct.pack("!I", t)
                        channel.send(t) # send timestamp
                        channel.close() # disco
                        m=nom_function_actuelle+" response OK "+str(info)
                        appel_log.write_log("info",m)
                        #print "apres m "
                print "time server self_continue=0"
                appel_log.write_log("warning",nom_function_actuelle+"\t
self._continue ="+str(self._continue))
                print "sortie du thread"

def main() :
        a=TimeServer()
        a.start()
        a.set_log_file("log_nw.txt")
        a.reset_log_file()
        while 1==1 :
                time.sleep(10)
                #a._continue=0
                pass
        time.sleep(2)

main()

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to