From 507c02aaa209af5b84bfa944d017dc58d86cacc5 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Mon, 10 Dec 2012 14:21:33 +0100 Subject: [PATCH] [REV] close_socket is back in netsvc.py bzr revid: chs@openerp.com-20121210132133-m1z2hb72y1r1wsei --- openerp/netsvc.py | 21 +++++++++++++++++++-- openerp/service/netrpc_server.py | 22 +--------------------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/openerp/netsvc.py b/openerp/netsvc.py index fead3bd7908..37de4dd5b8b 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -20,6 +20,9 @@ # ############################################################################## +#.apidoc title: Common Services: netsvc +#.apidoc module-mods: member-order: bysource + import errno import logging import logging.handlers @@ -41,9 +44,23 @@ import openerp _logger = logging.getLogger(__name__) +def close_socket(sock): + """ Closes a socket instance cleanly -#.apidoc title: Common Services: netsvc -#.apidoc module-mods: member-order: bysource + :param sock: the network socket to close + :type sock: socket.socket + """ + try: + sock.shutdown(socket.SHUT_RDWR) + except socket.error, e: + # On OSX, socket shutdowns both sides if any side closes it + # causing an error 57 'Socket is not connected' on shutdown + # of the other side (or something), see + # http://bugs.python.org/issue4397 + # note: stdlib fixed test, not behavior + if e.errno != errno.ENOTCONN or platform.system() not in ['Darwin', 'Windows']: + raise + sock.close() def abort_response(dummy_1, description, dummy_2, details): # TODO Replace except_{osv,orm} with these directly. diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py index a3e4ade7210..af89a734f28 100644 --- a/openerp/service/netrpc_server.py +++ b/openerp/service/netrpc_server.py @@ -22,8 +22,6 @@ #.apidoc title: NET-RPC Server """ This file contains instance of the net-rpc server - - """ import logging import select @@ -38,24 +36,6 @@ import openerp.tools as tools _logger = logging.getLogger(__name__) -def close_socket(sock): - """ Closes a socket instance cleanly - - :param sock: the network socket to close - :type sock: socket.socket - """ - try: - sock.shutdown(socket.SHUT_RDWR) - except socket.error, e: - # On OSX, socket shutdowns both sides if any side closes it - # causing an error 57 'Socket is not connected' on shutdown - # of the other side (or something), see - # http://bugs.python.org/issue4397 - # note: stdlib fixed test, not behavior - if e.errno != errno.ENOTCONN or platform.system() not in ['Darwin', 'Windows']: - raise - sock.close() - class Server: """ Generic interface for all servers with an event loop etc. Override this to impement http, net-rpc etc. servers. @@ -133,7 +113,7 @@ class Server: return '\n'.join(res) def _close_socket(self): - close_socket(self.socket) + netsvc.close_socket(self.socket) class TinySocketClientThread(threading.Thread): def __init__(self, sock, threads):