Skip to content

Commit cb36ff7

Browse files
committed
Minor optimization of _setSocketPreConnect
1 parent ebfc481 commit cb36ff7

File tree

3 files changed

+47
-16
lines changed

3 files changed

+47
-16
lines changed

data/txt/sha256sums.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,14 @@ a033f92d136c707a25927c2383125ddb004d4283db62c004dcd67c3fc242bb1c lib/core/dump.
181181
1966ca704961fb987ab757f0a4afddbf841d1a880631b701487c75cef63d60c3 lib/core/__init__.py
182182
914a13ee21fd610a6153a37cbe50830fcbd1324c7ebc1e7fc206d5e598b0f7ad lib/core/log.py
183183
02a2264324caa249154e024a01bcd7cc40dbca4d647d5d10a50654b4415a6d77 lib/core/optiondict.py
184-
86070b96d28df6caa55e56f8fb16ba162524cab92a2d70eb110ae30f25099866 lib/core/option.py
184+
c1cb56f2a43e9f2f6b25d5f3d504e856ea21df6fc14af5e37b1000feef2bdb5a lib/core/option.py
185185
8171f6ee33e7742f06bb3014a28324496374beddee7b378ace10a26414a97762 lib/core/patch.py
186186
49c0fa7e3814dfda610d665ee02b12df299b28bc0b6773815b4395514ddf8dec lib/core/profiling.py
187187
03db48f02c3d07a047ddb8fe33a757b6238867352d8ddda2a83e4fec09a98d04 lib/core/readlineng.py
188188
48797d6c34dd9bb8a53f7f3794c85f4288d82a9a1d6be7fcf317d388cb20d4b3 lib/core/replication.py
189189
0b8c38a01bb01f843d94a6c5f2075ee47520d0c4aa799cecea9c3e2c5a4a23a6 lib/core/revision.py
190190
888daba83fd4a34e9503fe21f01fef4cc730e5cde871b1d40e15d4cbc847d56c lib/core/session.py
191-
2fcd2dddb4705e168e8fb3a8092f75a01f32118bd07316fc010a83c4eaf91ed1 lib/core/settings.py
191+
e2e711274bf226e785203353f9dd205e8fd3b9b11f9470513df38178edf288b6 lib/core/settings.py
192192
cd5a66deee8963ba8e7e9af3dd36eb5e8127d4d68698811c29e789655f507f82 lib/core/shell.py
193193
bcb5d8090d5e3e0ef2a586ba09ba80eef0c6d51feb0f611ed25299fbb254f725 lib/core/subprocessng.py
194194
d35650179816193164a5f177102f18379dfbe6bb6d40fbb67b78d907b41c8038 lib/core/target.py

lib/core/option.py

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from __future__ import division
99

1010
import codecs
11+
import collections
1112
import functools
1213
import glob
1314
import inspect
@@ -1057,11 +1058,31 @@ def _setSocketPreConnect():
10571058
def _thread():
10581059
while kb.get("threadContinue") and not conf.get("disablePrecon"):
10591060
try:
1060-
for key in socket._ready:
1061-
if len(socket._ready[key]) < SOCKET_PRE_CONNECT_QUEUE_SIZE:
1062-
s = socket.create_connection(*key[0], **dict(key[1]))
1063-
with kb.locks.socket:
1064-
socket._ready[key].append((s, time.time()))
1061+
with kb.locks.socket:
1062+
keys = list(socket._ready.keys())
1063+
1064+
for key in keys:
1065+
with kb.locks.socket:
1066+
q = socket._ready.get(key)
1067+
if q is None or len(q) >= SOCKET_PRE_CONNECT_QUEUE_SIZE:
1068+
continue
1069+
args = key[0]
1070+
kwargs = dict(key[1])
1071+
1072+
s = socket._create_connection(*args, **kwargs)
1073+
1074+
with kb.locks.socket:
1075+
q = socket._ready.get(key)
1076+
if q is not None and len(q) < SOCKET_PRE_CONNECT_QUEUE_SIZE:
1077+
q.append((s, time.time()))
1078+
s = None
1079+
1080+
if s is not None:
1081+
try:
1082+
s.close()
1083+
except:
1084+
pass
1085+
10651086
except KeyboardInterrupt:
10661087
break
10671088
except:
@@ -1071,26 +1092,36 @@ def _thread():
10711092

10721093
def create_connection(*args, **kwargs):
10731094
retVal = None
1095+
stale = []
10741096

10751097
key = (tuple(args), frozenset(kwargs.items()))
10761098
with kb.locks.socket:
10771099
if key not in socket._ready:
1078-
socket._ready[key] = []
1100+
socket._ready[key] = collections.deque()
10791101

1080-
while len(socket._ready[key]) > 0:
1081-
candidate, created = socket._ready[key].pop(0)
1102+
q = socket._ready[key]
1103+
while len(q) > 0:
1104+
candidate, created = q.popleft()
10821105
if (time.time() - created) < PRECONNECT_CANDIDATE_TIMEOUT:
10831106
retVal = candidate
10841107
break
10851108
else:
1086-
try:
1087-
candidate.shutdown(socket.SHUT_RDWR)
1088-
candidate.close()
1089-
except socket.error:
1090-
pass
1109+
stale.append(candidate)
1110+
1111+
for candidate in stale:
1112+
try:
1113+
candidate.shutdown(socket.SHUT_RDWR)
1114+
candidate.close()
1115+
except:
1116+
pass
10911117

10921118
if not retVal:
10931119
retVal = socket._create_connection(*args, **kwargs)
1120+
else:
1121+
try:
1122+
retVal.settimeout(kwargs.get("timeout", socket.getdefaulttimeout()))
1123+
except:
1124+
pass
10941125

10951126
return retVal
10961127

lib/core/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from thirdparty import six
2020

2121
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
22-
VERSION = "1.10.1.72"
22+
VERSION = "1.10.1.73"
2323
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
2424
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
2525
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)

0 commit comments

Comments
 (0)