def serve_file(port, filename): """ Run server on port to serve file f Raise exception if fails """ signal.signal(signal.SIGCHLD, sigchld_signal) print("Server ran...") server_socket = None global childs try: server_socket = server.create_local_server(port) #fork udp server try: pid = os.fork() except: print("fork failed") return 1 if pid == 0: f = open(filename, "rb") try: server_udp.serve_file(port, f) finally: f.close() os._exit(0) else: print("Created udp fork [%s]" % pid) childs.append(pid) while(True): try: (conn, addr_info) = server_socket.accept() except socket.error as e: if e.errno == errno.EINTR: continue try: pid = os.fork() except OSError as e: print("fork failed") return 1 if pid == 0: #its child f = open(filename, "rb") server_socket.close() try: handle_server_request(conn, addr_info, f) finally: f.close() os._exit(0) else: print("Created fork [%s]" % pid) childs.append(pid) conn.close() except socket.error, e: print("Socket error: %s" % (e))
def server_command(args): if not os.path.isfile(args.r): print("File %s doesn't exists" % args.r) sys.exit(1) try: if args.udp: try: f = open(args.r, "rb") except IOError, e: # exit print("Can't open file") sys.exit(1) finally: f.close() server_udp.serve_file(args.port, f)