autorun: changed Server socket linger.
authorAdriana Draghici <adriana008@gmail.com>
Fri, 16 Apr 2010 15:37:57 +0000 (15:37 +0000)
committerAdriana Draghici <adriana008@gmail.com>
Fri, 16 Apr 2010 15:38:04 +0000 (15:38 +0000)
autorun/server/Server.py

index 33d9583..4fe6b60 100644 (file)
@@ -4,6 +4,7 @@ import sys, os, socket
 import time
 import pickle
 import signal
+import struct
 
 from daemon import Daemon
 from Util import *
@@ -27,14 +28,12 @@ class MyDaemon(Daemon):
 
     def set_address(self, ip):
         self.ip = ip
-        print "am setat ip ", ip
     
     def set_port(self, port):
         self.port = port
-        print "am setat port ", port
     
     def run(self):
-        self.doServer(self.ip, self.port)
+        self.do_Server(self.ip, self.port)
     
     def recv_pickled_data(self, clientsock):
         msg = ''
@@ -115,18 +114,6 @@ class MyDaemon(Daemon):
             print "Server: started client with pid = ", pid
         return pid
 
-        """Simple test 
-
-        btcr = TransmissionRun("/usr/bin/transmissioncli")
-        btcr.config_run("/home/adriana/p2p/p2p-dld/transmission", 
-                        "/home/adriana/p2p/p2p-log/transmission", 
-                        "scrubs.out", "/home/adriana/p2p/", 
-                        "transmission-scrubs.log", 10150, 
-                        "/home/adriana/p2p/p2p-meta/scrubs.torrent")
-        
-        btcr.start()
-        btcr.run_client(btcr.simple_run_command)
-        """
 
     """
         Stops a BT client by killing it.
@@ -153,31 +140,39 @@ class MyDaemon(Daemon):
             return -1
         info_list = [info_dict[CLIENT],info_dict[TORRENT]]
         if LOG_DIR in info_dict:
-            info_list.append(info_dict[LOG_DIR], LOG_DIR)
+            info_list.append((info_dict[LOG_DIR], LOG_DIR))
         if OUT_FILE in info_dict:
-            info_list.append(info_dict[OUT_FILE], OUT_FILE)
+            info_list.append((info_dict[OUT_FILE], OUT_FILE))
         if LOG_FILE in info_dict:
-            info_list.append(info_dict[LOG_FILE], LOG_FILE)
+            info_list.append((info_dict[LOG_FILE], LOG_FILE))
+        print info_list
         
         file_list.append (info_list)
 
         return 0 # success
 
 
+    def set_linger(self,sock, l_onoff, l_linger):
+        """Sets the SO_LINGER value on a socket."""
+        sock.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,
+                struct.pack('ii', l_onoff, l_linger))
+
+
     """
         Accepts socket connections and receives messages from commander.
     """
-    def doServer(self, ip, port):
+    def do_Server(self, ip, port):
 
-        serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        self.serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         if(self.DEBUG):
             print "Server: host ip = %s, port = %s"%(ip,SERVER_PORT)
-        serversocket.bind((ip,SERVER_PORT));
-        serversocket.listen(10) #max 10 requests
+        self.serversocket.bind((ip,SERVER_PORT));
+        self.serversocket.listen(10) #max 10 requests
+        self.set_linger(self.serversocket,1, 2)
         while(1):
             if(self.DEBUG):
                 print "Server: accepting connections"
-            (clientsock, address) = serversocket.accept();
+            (clientsock, address) = self.serversocket.accept();
             if(self.DEBUG):
                 print "Server: accepted connection from ", address
             
@@ -201,7 +196,6 @@ class MyDaemon(Daemon):
         
             elif msg[0] == GET_OUTPUT:
 
-                print "LA get output\n"
                 import os.path
                 if not os.path.exists(SESSIONS_FILE):
                     print "Error: No sessions_file"
@@ -214,20 +208,14 @@ class MyDaemon(Daemon):
                     file_list = []
                     try:
                         while line != '':
-                            print line 
                             if size == 0:
-                                    print "aici la size = 0"
                                     if info_dict != {} and self.add_to_output_msg(file_list, info_dict) < 0:
-                                        print "aici"
                                         raise Exception
-                                    print "aici3ia"
                                     size = int(line)
-                                    print "aici3"
                                     info_dict = {}
                             else:
                                 parts = line.strip().split(':')
                                 if len(parts) != 2:
-                                    print "aici2"
                                     raise Exception
                                 info_dict[parts[0]] = parts[1]
                                 size = size - 1
@@ -264,14 +252,14 @@ if __name__ == "__main__":
             daemon = MyDaemon('/tmp/daemon-example.pid', sys.argv[2], stdout = '/home/p2p/out', stderr = '/home/p2p/err') 
             daemon.start()
         elif 'stop' == sys.argv[1]:
-            daemon = MyDaemon('/tmp/daemon-example.pid') 
+            daemon = MyDaemon('/tmp/daemon-example.pid')
             daemon.stop()
         elif 'restart' == sys.argv[1]:
             daemon = MyDaemon('/tmp/daemon-example.pid') 
             daemon.restart()
         elif 'no' == sys.argv[1]: #no daemon
             daemon = MyDaemon('/tmp/daemon-example.pid', sys.argv[2], stdout = '/home/p2p/out', stderr = '/home/p2p/err') 
-            daemon.doServer(sys.argv[2],"")
+            daemon.do_Server(sys.argv[2],"")
         else:
             print "Unknown command"
             sys.exit(2)