- Passing socketopt parameter to Websocket ctor.
This commit is contained in:
liris
2013-03-04 09:37:42 +09:00
parent 4a4b50ab23
commit 502c80be05
3 changed files with 26 additions and 6 deletions

View File

@@ -1,6 +1,6 @@
from setuptools import setup from setuptools import setup
VERSION = "0.9.0" VERSION = "0.10.0"
setup( setup(

View File

@@ -4,6 +4,7 @@
import base64 import base64
import uuid import uuid
import unittest import unittest
import socket
# websocket-client # websocket-client
import websocket as ws import websocket as ws
@@ -32,6 +33,7 @@ class StringSockMock:
def send(self, data): def send(self, data):
self.sent.append(data) self.sent.append(data)
return len(data)
class HeaderSockMock(StringSockMock): class HeaderSockMock(StringSockMock):
@@ -304,5 +306,15 @@ class WebSocketAppTest(unittest.TestCase):
# Note: We can't use 'is' for comparing the functions directly, need to use 'id'. # Note: We can't use 'is' for comparing the functions directly, need to use 'id'.
self.assertEquals(WebSocketAppTest.get_mask_key_id, id(my_mask_key_func)) self.assertEquals(WebSocketAppTest.get_mask_key_id, id(my_mask_key_func))
class SockOptTest(unittest.TestCase):
def testSockOpt(self):
sockopt = ((socket.IPPROTO_TCP, socket.TCP_NODELAY, 1),)
s = ws.WebSocket(sockopt = sockopt)
self.assertNotEquals(s.sock.getsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY), 0)
s = ws.create_connection("ws://echo.websocket.org", sockopt = sockopt)
self.assertNotEquals(s.sock.getsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY), 0)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@@ -172,7 +172,8 @@ def create_connection(url, timeout=None, **options):
options: current support option is only "header". options: current support option is only "header".
if you set header as dict value, the custom HTTP headers are added. if you set header as dict value, the custom HTTP headers are added.
""" """
websock = WebSocket() sockopt = options.get("sockopt", ())
websock = WebSocket(sockopt=sockopt)
websock.settimeout(timeout != None and timeout or default_timeout) websock.settimeout(timeout != None and timeout or default_timeout)
websock.connect(url, **options) websock.connect(url, **options)
return websock return websock
@@ -349,14 +350,18 @@ class WebSocket(object):
get_mask_key: a callable to produce new mask keys, see the set_mask_key get_mask_key: a callable to produce new mask keys, see the set_mask_key
function's docstring for more details function's docstring for more details
sockopt: values for socket.setsockopt.
sockopt must be tuple and each element is argument of sock.setscokopt.
""" """
def __init__(self, get_mask_key = None): def __init__(self, get_mask_key = None, sockopt = ()):
""" """
Initalize WebSocket object. Initalize WebSocket object.
""" """
self.connected = False self.connected = False
self.io_sock = self.sock = socket.socket() self.io_sock = self.sock = socket.socket()
for opts in sockopt:
self.sock.setsockopt(*opts)
self.get_mask_key = get_mask_key self.get_mask_key = get_mask_key
def set_mask_key(self, func): def set_mask_key(self, func):
@@ -687,7 +692,8 @@ class WebSocketApp(object):
""" """
def __init__(self, url, header = [], def __init__(self, url, header = [],
on_open = None, on_message = None, on_error = None, on_open = None, on_message = None, on_error = None,
on_close = None, keep_running = True, get_mask_key = None): on_close = None, keep_running = True, get_mask_key = None,
sockopt=()):
""" """
url: websocket url. url: websocket url.
header: custom header for websocket handshake. header: custom header for websocket handshake.
@@ -734,15 +740,17 @@ class WebSocketApp(object):
self.keep_running = False self.keep_running = False
self.sock.close() self.sock.close()
def run_forever(self): def run_forever(self, sockopt=()):
""" """
run event loop for WebSocket framework. run event loop for WebSocket framework.
This loop is infinite loop and is alive during websocket is available. This loop is infinite loop and is alive during websocket is available.
sockopt: values for socket.setsockopt.
sockopt must be tuple and each element is argument of sock.setscokopt.
""" """
if self.sock: if self.sock:
raise WebSocketException("socket is already opened") raise WebSocketException("socket is already opened")
try: try:
self.sock = WebSocket(self.get_mask_key) self.sock = WebSocket(self.get_mask_key, sockopt = sockopt)
self.sock.connect(self.url, header = self.header) self.sock.connect(self.url, header = self.header)
self._run_with_no_err(self.on_open) self._run_with_no_err(self.on_open)
while self.keep_running: while self.keep_running: