X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fns3%2Fns3server.py;h=8b3cd79a6a28ee7b0a8be68a9c66283958c83700;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=43e0d5f5dd945c1dca03e42f3cc157aeee14e228;hpb=9253c552499af84f3b7a967f21f795e9575dda7e;p=nepi.git diff --git a/src/nepi/resources/ns3/ns3server.py b/src/nepi/resources/ns3/ns3server.py index 43e0d5f5..8b3cd79a 100644 --- a/src/nepi/resources/ns3/ns3server.py +++ b/src/nepi/resources/ns3/ns3server.py @@ -3,9 +3,8 @@ # Copyright (C) 2014 INRIA # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation; # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -98,11 +97,17 @@ def handle_message(ns3_wrapper, msg_type, args, kwargs): return "FLUSHED" -def create_socket(socket_name): +def open_socket(socket_name): sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.bind(socket_name) return sock +def close_socket(sock): + try: + sock.close() + except: + pass + def recv_msg(conn): msg = [] chunk = '' @@ -110,7 +115,7 @@ def recv_msg(conn): while '\n' not in chunk: try: chunk = conn.recv(1024) - except (OSError, socket.error), e: + except (OSError, socket.error) as e: if e[0] != errno.EINTR: raise # Ignore eintr errors @@ -189,7 +194,7 @@ def run_server(socket_name, level = logging.INFO, ns_log = None, ns3_wrapper.logger.info("STARTING...") # create unix socket to receive instructions - sock = create_socket(socket_name) + sock = open_socket(socket_name) sock.listen(0) # wait for messages to arrive and process them @@ -197,16 +202,18 @@ def run_server(socket_name, level = logging.INFO, ns_log = None, while not stop: conn, addr = sock.accept() - conn.settimeout(5) + conn.settimeout(30) try: (msg_type, args, kwargs) = recv_msg(conn) - except socket.timeout, e: + except socket.timeout as e: # Ingore time-out + close_socket(conn) continue if not msg_type: # Ignore - connection lost + close_socket(conn) continue if msg_type == NS3WrapperMessage.SHUTDOWN: @@ -218,6 +225,7 @@ def run_server(socket_name, level = logging.INFO, ns_log = None, import traceback err = traceback.format_exc() ns3_wrapper.logger.error(err) + close_socket(conn) raise try: @@ -226,12 +234,12 @@ def run_server(socket_name, level = logging.INFO, ns_log = None, import traceback err = traceback.format_exc() ns3_wrapper.logger.error(err) + close_socket(conn) raise - - try: - conn.close() - except: - pass + + close_socket(conn) + + close_socket(sock) ns3_wrapper.logger.info("EXITING...")