Skip to content

Commit

Permalink
Merge bitcoin#11323: mininode: add an optimistic write and disable nagle
Browse files Browse the repository at this point in the history
1817398 mininode: add an optimistic write and disable nagle (Cory Fields)

Pull request description:

  Disclaimer: I'm not familiar with asyncore, so I'm unclear how safe this is. It works for me (tm).

  Because the poll/select loop may pause for 100msec before actually doing a send, and we have no way to force the loop awake, try sending from the calling thread if the queue is empty.

  Also, disable nagle as all sends should be either full messages or unfinished sends.

  This shaves an average of ~1 minute or so off of my accumulated runtime, and 10-15 seconds off of actual runtime.

Tree-SHA512: 6b61b8058e621dacf0b4dd353c10e3666fbda0691440eb6ebc432491ebada80a781dcd09291bf03e70112a41d3c2a0c91775ed08824b79bf8d0ebed11595c28b
  • Loading branch information
MarcoFalke committed Sep 18, 2017
2 parents 44e1fd9 + 1817398 commit 4ce2f3d
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion test/functional/test_framework/mininode.py
Original file line number Diff line number Diff line change
Expand Up @@ -1654,6 +1654,7 @@ def __init__(self, dstaddr, dstport, rpc, callback, net="regtest", services=NODE
self.dstaddr = dstaddr
self.dstport = dstport
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
self.sendbuf = b""
self.recvbuf = b""
self.ver_send = 209
Expand Down Expand Up @@ -1792,7 +1793,14 @@ def send_message(self, message, pushbuf=False):
tmsg += h[:4]
tmsg += data
with mininode_lock:
self.sendbuf += tmsg
if (len(self.sendbuf) == 0 and not pushbuf):
try:
sent = self.send(tmsg)
self.sendbuf = tmsg[sent:]
except BlockingIOError:
self.sendbuf = tmsg
else:
self.sendbuf += tmsg
self.last_sent = time.time()

def got_message(self, message):
Expand Down

0 comments on commit 4ce2f3d

Please sign in to comment.