15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from __future__ import absolute_import 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import socket 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import util 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)util.AddDirToPythonPath( 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) util.GetTelemetryDir(), 'third_party', 'websocket-client') 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# pylint: disable=W0611 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from websocket import create_connection as _create_connection 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from websocket import WebSocketException 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from websocket import WebSocketTimeoutException 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def create_connection(*args, **kwargs): 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sockopt = kwargs.get('sockopt', []) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # By default, we set SO_REUSEADDR on all websockets used by Telemetry. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This prevents spurious address in use errors on Windows. 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # TODO(tonyg): We may want to set SO_NODELAY here as well. 252385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch sockopt.append((socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kwargs['sockopt'] = sockopt 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return _create_connection(*args, **kwargs) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)