diff --git a/sleekxmpp/xmlstream/filesocket.py b/sleekxmpp/xmlstream/filesocket.py index 92d61e6..580c43f 100644 --- a/sleekxmpp/xmlstream/filesocket.py +++ b/sleekxmpp/xmlstream/filesocket.py @@ -1,8 +1,18 @@ from socket import _fileobject +import socket class filesocket(_fileobject): - def read(self, size=-1): + def read(self, size=4096): data = self._sock.recv(size) if data is not None: return data + +class Socket26(socket._socketobject): + + def makefile(self, mode='r', bufsize=-1): + """makefile([mode[, bufsize]]) -> file object + Return a regular file object corresponding to the socket. The mode + and bufsize arguments are as for the built-in open() function.""" + return filesocket(self._sock, mode, bufsize) + diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index 5178693..0bf8b72 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -26,7 +26,7 @@ import sys if sys.version_info < (3, 0): #monkey patch broken filesocket object from . import filesocket - socket._fileobject = filesocket.filesocket + #socket._fileobject = filesocket.filesocket class RestartStream(Exception): @@ -96,7 +96,10 @@ class XMLStream(object): if use_tls is not None: self.use_tls = use_tls self.state.set('is client', True) - self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + if sys.version_info < (3, 0): + self.socket = filesocket.Socket26(socket.AF_INET, socket.SOCK_STREAM) + else: + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.settimeout(None) if self.use_ssl and self.ssl_support: logging.debug("Socket Wrapped for SSL") @@ -222,10 +225,9 @@ class XMLStream(object): def sendRaw(self, data): logging.debug("SEND: %s" % data) try: - self.socket.send(bytes(data, "utf-8")) - except TypeError: - self.socket.send(bytes(data)) - #except socket.error,(errno, strerror): + self.socket.send(data.encode('utf-8')) + #self.socket.send(bytes(data, "utf-8")) + #except socket.error,(errno, strerror): except: self.state.set('connected', False) if self.state.reconnect: @@ -303,6 +305,7 @@ class XMLStream(object): try: handler.run(args[0]) except Exception as e: + traceback.print_exc() args[0].exception(e) elif etype == 'sched': try: