summaryrefslogtreecommitdiff
path: root/pysnmp/carrier
diff options
context:
space:
mode:
authorelie <elie>2012-10-11 09:24:51 +0000
committerelie <elie>2012-10-11 09:24:51 +0000
commitd8c6db1f535bee24ab56fa90f31f00e8e36ce445 (patch)
tree7b5bfc0687aa5bbfa69c239e4985b895ad635261 /pysnmp/carrier
parent293afec11f3da281433145fb19d83a7e9aa1eb7c (diff)
downloadpysnmp-d8c6db1f535bee24ab56fa90f31f00e8e36ce445.tar.gz
I/O sockets buffer sizes made configurable, minimum default is now
forced to be no less than 2**11 (to fit two huge datagrams)
Diffstat (limited to 'pysnmp/carrier')
-rw-r--r--pysnmp/carrier/asynsock/base.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/pysnmp/carrier/asynsock/base.py b/pysnmp/carrier/asynsock/base.py
index 3d794b7..0cef5c6 100644
--- a/pysnmp/carrier/asynsock/base.py
+++ b/pysnmp/carrier/asynsock/base.py
@@ -2,10 +2,12 @@
import socket, sys
import asyncore
from pysnmp.carrier import error
+from pysnmp import debug
class AbstractSocketTransport(asyncore.dispatcher):
sockFamily = sockType = None
retryCount = 0; retryInterval = 0
+ bufferSize = 131070
def __init__(self, sock=None, sockMap=None):
if sock is None:
if self.sockFamily is None:
@@ -20,6 +22,16 @@ class AbstractSocketTransport(asyncore.dispatcher):
sock = socket.socket(self.sockFamily, self.sockType)
except socket.error:
raise error.CarrierError('socket() failed: %s' % sys.exc_info()[1])
+
+ try:
+ for b in socket.SO_RCVBUF, socket.SO_SNDBUF:
+ bsize = sock.getsockopt(socket.SOL_SOCKET, b)
+ if bsize < self.bufferSize:
+ sock.setsockopt(socket.SOL_SOCKET, b, self.bufferSize)
+ debug.logger & debug.flagIO and debug.logger('%s: socket %d buffer size increased from %d to %d for buffer %d' % (self.__class__.__name__, sock.fileno(), bsize, self.bufferSize, b))
+ except Exception:
+ debug.logger & debug.flagIO and debug.logger('%s: socket buffer size option mangling failure for buffer %d: %s' % (self.__class__.__name__, b, sys.exc_info()[1]))
+
if sockMap is None:
# The socket map is managed by the AsynsockDispatcher on
# which this transport is registered, so this is a fake