Merge pull request #99 from tomerfiliba/patch-1
Make send() and recv() fail when channel is closed
This commit is contained in:
commit
962d4a3cec
|
@ -25,6 +25,7 @@ import sys
|
||||||
import time
|
import time
|
||||||
import threading
|
import threading
|
||||||
import socket
|
import socket
|
||||||
|
import errno
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from paramiko.common import *
|
from paramiko.common import *
|
||||||
|
@ -605,6 +606,10 @@ class Channel (object):
|
||||||
@raise socket.timeout: if no data is ready before the timeout set by
|
@raise socket.timeout: if no data is ready before the timeout set by
|
||||||
L{settimeout}.
|
L{settimeout}.
|
||||||
"""
|
"""
|
||||||
|
if self.closed:
|
||||||
|
# this doesn't seem useful, but it is the documented behavior of Socket
|
||||||
|
raise socket.error(errno.EBADF, 'Socket is closed')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
out = self.in_buffer.read(nbytes, self.timeout)
|
out = self.in_buffer.read(nbytes, self.timeout)
|
||||||
except PipeTimeout, e:
|
except PipeTimeout, e:
|
||||||
|
@ -655,6 +660,10 @@ class Channel (object):
|
||||||
|
|
||||||
@since: 1.1
|
@since: 1.1
|
||||||
"""
|
"""
|
||||||
|
if self.closed:
|
||||||
|
# this doesn't seem useful, but it is the documented behavior of Socket
|
||||||
|
raise socket.error(errno.EBADF, 'Socket is closed')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
out = self.in_stderr_buffer.read(nbytes, self.timeout)
|
out = self.in_stderr_buffer.read(nbytes, self.timeout)
|
||||||
except PipeTimeout, e:
|
except PipeTimeout, e:
|
||||||
|
@ -708,6 +717,10 @@ class Channel (object):
|
||||||
@raise socket.timeout: if no data could be sent before the timeout set
|
@raise socket.timeout: if no data could be sent before the timeout set
|
||||||
by L{settimeout}.
|
by L{settimeout}.
|
||||||
"""
|
"""
|
||||||
|
if self.closed:
|
||||||
|
# this doesn't seem useful, but it is the documented behavior of Socket
|
||||||
|
raise socket.error(errno.EBADF, 'Socket is closed')
|
||||||
|
|
||||||
size = len(s)
|
size = len(s)
|
||||||
self.lock.acquire()
|
self.lock.acquire()
|
||||||
try:
|
try:
|
||||||
|
@ -745,6 +758,10 @@ class Channel (object):
|
||||||
|
|
||||||
@since: 1.1
|
@since: 1.1
|
||||||
"""
|
"""
|
||||||
|
if self.closed:
|
||||||
|
# this doesn't seem useful, but it is the documented behavior of Socket
|
||||||
|
raise socket.error(errno.EBADF, 'Socket is closed')
|
||||||
|
|
||||||
size = len(s)
|
size = len(s)
|
||||||
self.lock.acquire()
|
self.lock.acquire()
|
||||||
try:
|
try:
|
||||||
|
@ -783,9 +800,6 @@ class Channel (object):
|
||||||
This is irritating, but identically follows python's API.
|
This is irritating, but identically follows python's API.
|
||||||
"""
|
"""
|
||||||
while s:
|
while s:
|
||||||
if self.closed:
|
|
||||||
# this doesn't seem useful, but it is the documented behavior of Socket
|
|
||||||
raise socket.error('Socket is closed')
|
|
||||||
sent = self.send(s)
|
sent = self.send(s)
|
||||||
s = s[sent:]
|
s = s[sent:]
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Reference in New Issue