diff options
author | elie <elie> | 2012-10-11 09:24:51 +0000 |
---|---|---|
committer | elie <elie> | 2012-10-11 09:24:51 +0000 |
commit | d8c6db1f535bee24ab56fa90f31f00e8e36ce445 (patch) | |
tree | 7b5bfc0687aa5bbfa69c239e4985b895ad635261 /pysnmp/carrier | |
parent | 293afec11f3da281433145fb19d83a7e9aa1eb7c (diff) | |
download | pysnmp-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.py | 12 |
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 |