| Home | Trees | Indices | Help |
|
|---|
|
|
1 # Software License Agreement (BSD License)
2 #
3 # Copyright (c) 2008, Willow Garage, Inc.
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 #
10 # * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # * Redistributions in binary form must reproduce the above
13 # copyright notice, this list of conditions and the following
14 # disclaimer in the documentation and/or other materials provided
15 # with the distribution.
16 # * Neither the name of Willow Garage, Inc. nor the names of its
17 # contributors may be used to endorse or promote products derived
18 # from this software without specific prior written permission.
19 #
20 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 # POSSIBILITY OF SUCH DAMAGE.
32 #
33 # Revision $Id$
34
35 """
36 Utility routines for rosmaster.
37 """
38
39 try:
40 from urllib.parse import urlparse
41 except ImportError:
42 from urlparse import urlparse
43 try:
44 from xmlrpc.client import ServerProxy
45 except ImportError:
46 from xmlrpclib import ServerProxy
47
48 from defusedxml.xmlrpc import monkey_patch
49 monkey_patch()
50 del monkey_patch
51
52 import errno
53 import socket
54
55 _proxies = {} #cache ServerProxys
57 """
58 @return: instance for calling remote server or None if not a valid URI
59 @rtype: xmlrpc.client.ServerProxy
60 """
61 if uri is None:
62 return None
63 uriValidate = urlparse(uri)
64 if not uriValidate[0] or not uriValidate[1]:
65 return None
66 if not uri in _proxies:
67 _proxies[uri] = ServerProxy(uri)
68 close_half_closed_sockets()
69 return _proxies[uri]
70
71
73 if not hasattr(socket, 'TCP_INFO'):
74 return
75 for proxy in _proxies.values():
76 transport = proxy("transport")
77 if transport._connection and transport._connection[1] is not None and transport._connection[1].sock is not None:
78 try:
79 state = transport._connection[1].sock.getsockopt(socket.SOL_TCP, socket.TCP_INFO)
80 except socket.error as e: # catch [Errno 92] Protocol not available
81 if e.args[0] is errno.ENOPROTOOPT:
82 return
83 raise
84 if state == 8: # CLOSE_WAIT
85 transport.close()
86
87
91
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Sun Feb 3 11:29:49 2019 | http://epydoc.sourceforge.net |