From e49eceac91b32e4d6c8f087d31b0eff6378fab2c Mon Sep 17 00:00:00 2001 From: Ilya Semyonov Date: Tue, 8 Dec 2015 17:14:32 +0300 Subject: [PATCH] Use pre-initialized stream socket Allow creating WebSocket connection on existing stream socket instance (either TCP or SSL). --- websocket/_core.py | 5 ++++- websocket/_http.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/websocket/_core.py b/websocket/_core.py index 5f0942e..6bcf04f 100644 --- a/websocket/_core.py +++ b/websocket/_core.py @@ -90,6 +90,7 @@ def create_connection(url, timeout=None, **options): "subprotocols" - array of available sub protocols. default is None. "skip_utf8_validation" - skip utf8 validation. + "socket" - pre-initialized stream socket. """ sockopt = options.get("sockopt", []) sslopt = options.get("sslopt", {}) @@ -261,9 +262,11 @@ class WebSocket(object): defualt is None "subprotocols" - array of available sub protocols. default is None. + "socket" - pre-initialized stream socket. """ - self.sock, addrs = connect(url, self.sock_opt, proxy_info(**options)) + self.sock, addrs = connect(url, self.sock_opt, proxy_info(**options), + options.pop('socket', None)) try: self.handshake_response = handshake(self.sock, *addrs, **options) diff --git a/websocket/_http.py b/websocket/_http.py index 4666ff7..c4a6956 100644 --- a/websocket/_http.py +++ b/websocket/_http.py @@ -51,8 +51,12 @@ class proxy_info(object): self.auth = None self.no_proxy = None -def connect(url, options, proxy): +def connect(url, options, proxy, socket): hostname, port, resource, is_secure = parse_url(url) + + if socket: + return socket, (hostname, port, resource) + addrinfo_list, need_tunnel, auth = _get_addrinfo_list(hostname, port, is_secure, proxy) if not addrinfo_list: raise WebSocketException(