~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/server.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-06-10 08:15:19 UTC
  • mfrom: (3489.1.2 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20080610081519-95unlj6ayptlh2uv
(mbp) Bump version to 1.6b3

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
    trace,
28
28
    transport,
29
29
)
30
 
from bzrlib.lazy_import import lazy_import
31
 
lazy_import(globals(), """
32
 
from bzrlib.smart import medium
33
 
""")
 
30
from bzrlib.smart.medium import SmartServerSocketStreamMedium
34
31
 
35
32
 
36
33
class SmartTCPServer(object):
62
59
        from socket import error as socket_error
63
60
        self._socket_error = socket_error
64
61
        self._socket_timeout = socket_timeout
65
 
        addrs = socket.getaddrinfo(host, port, socket.AF_UNSPEC, 
66
 
            socket.SOCK_STREAM, 0, socket.AI_PASSIVE)[0]
67
 
 
68
 
        (family, socktype, proto, canonname, sockaddr) = addrs
69
 
 
70
 
        self._server_socket = socket.socket(family, socktype, proto)
 
62
        self._server_socket = socket.socket()
71
63
        # SO_REUSERADDR has a different meaning on Windows
72
64
        if sys.platform != 'win32':
73
65
            self._server_socket.setsockopt(socket.SOL_SOCKET,
74
66
                socket.SO_REUSEADDR, 1)
75
67
        try:
76
 
            self._server_socket.bind(sockaddr)
 
68
            self._server_socket.bind((host, port))
77
69
        except self._socket_error, message:
78
70
            raise errors.CannotBindAddress(host, port, message)
79
71
        self._sockname = self._server_socket.getsockname()
155
147
        # propogates to the newly accepted socket.
156
148
        conn.setblocking(True)
157
149
        conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
158
 
        handler = medium.SmartServerSocketStreamMedium(
 
150
        handler = SmartServerSocketStreamMedium(
159
151
            conn, self.backing_transport, self.root_client_path)
160
152
        thread_name = 'smart-server-child' + thread_name_suffix
161
153
        connection_thread = threading.Thread(
283
275
        """Get a backing transport from a server we are decorating."""
284
276
        url = 'readonly+' + backing_transport_server.get_url()
285
277
        return transport.get_transport(url)
286
 
 
287
 
 
288
 
class SmartTCPServer_for_testing_v2_only(SmartTCPServer_for_testing):
289
 
    """A variation of SmartTCPServer_for_testing that limits the client to
290
 
    using RPCs in protocol v2 (i.e. bzr <= 1.5).
291
 
    """
292
 
 
293
 
    def get_url(self):
294
 
        url = super(SmartTCPServer_for_testing_v2_only, self).get_url()
295
 
        url = 'bzr-v2://' + url[len('bzr://'):]
296
 
        return url
297
 
 
298
 
 
299
 
class ReadonlySmartTCPServer_for_testing_v2_only(SmartTCPServer_for_testing_v2_only):
300
 
    """Get a readonly server for testing."""
301
 
 
302
 
    def get_backing_transport(self, backing_transport_server):
303
 
        """Get a backing transport from a server we are decorating."""
304
 
        url = 'readonly+' + backing_transport_server.get_url()
305
 
        return transport.get_transport(url)
306
 
 
307