summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/rpc.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/idlelib/rpc.py')
-rw-r--r--Lib/idlelib/rpc.py14
1 files changed, 6 insertions, 8 deletions
diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py
index 90451e3..d3a9fd8 100644
--- a/Lib/idlelib/rpc.py
+++ b/Lib/idlelib/rpc.py
@@ -320,23 +320,20 @@ class SocketIO:
self.debug("putmessage:%d:" % message[0])
try:
s = pickle.dumps(message)
- except pickle.UnpicklingError:
+ except pickle.PicklingError:
print >>sys.__stderr__, "Cannot pickle:", `message`
raise
s = struct.pack("<i", len(s)) + s
while len(s) > 0:
try:
- n = self.sock.send(s)
+ r, w, x = select.select([], [self.sock], [])
+ n = self.sock.send(s[:BUFSIZE])
except (AttributeError, socket.error):
# socket was closed
raise IOError
else:
s = s[n:]
- def ioready(self, wait):
- r, w, x = select.select([self.sock.fileno()], [], [], wait)
- return len(r)
-
buffer = ""
bufneed = 4
bufstate = 0 # meaning: 0 => reading count; 1 => reading data
@@ -344,7 +341,8 @@ class SocketIO:
def pollpacket(self, wait):
self._stage0()
if len(self.buffer) < self.bufneed:
- if not self.ioready(wait):
+ r, w, x = select.select([self.sock.fileno()], [], [], wait)
+ if len(r) == 0:
return None
try:
s = self.sock.recv(BUFSIZE)
@@ -377,7 +375,7 @@ class SocketIO:
return None
try:
message = pickle.loads(packet)
- except:
+ except pickle.UnpicklingError:
print >>sys.__stderr__, "-----------------------"
print >>sys.__stderr__, "cannot unpickle packet:", `packet`
traceback.print_stack(file=sys.__stderr__)