TCP Transport: enable NO_DELAY for clients (#822)
This commit is contained in:
parent
f14ada3dcf
commit
f7f1e89669
16
.pinned
16
.pinned
|
@ -1,16 +1,16 @@
|
||||||
bearssl;https://github.com/status-im/nim-bearssl@#a647994910904b0103a05db3a5ec1ecfc4d91a88
|
bearssl;https://github.com/status-im/nim-bearssl@#acf9645e328bdcab481cfda1c158e07ecd46bd7b
|
||||||
chronicles;https://github.com/status-im/nim-chronicles@#32ac8679680ea699f7dbc046e8e0131cac97d41a
|
chronicles;https://github.com/status-im/nim-chronicles@#32ac8679680ea699f7dbc046e8e0131cac97d41a
|
||||||
chronos;https://github.com/status-im/nim-chronos@#75d030ff71264513fb9701c75a326cd36fcb4692
|
chronos;https://github.com/status-im/nim-chronos@#5d3da66e563d21277b57a9b601744273c083a01b
|
||||||
dnsclient;https://github.com/ba0f3/dnsclient.nim@#fcd7443634b950eaea574e5eaa00a628ae029823
|
dnsclient;https://github.com/ba0f3/dnsclient.nim@#fcd7443634b950eaea574e5eaa00a628ae029823
|
||||||
faststreams;https://github.com/status-im/nim-faststreams@#b42daf41d8eb4fbce40add6836bed838f8d85b6f
|
faststreams;https://github.com/status-im/nim-faststreams@#814f8927e1f356f39219f37f069b83066bcc893a
|
||||||
httputils;https://github.com/status-im/nim-http-utils@#a85bd52ae0a956983ca6b3267c72961d2ec0245f
|
httputils;https://github.com/status-im/nim-http-utils@#a85bd52ae0a956983ca6b3267c72961d2ec0245f
|
||||||
json_serialization;https://github.com/status-im/nim-json-serialization@#a7d815ed92f200f490c95d3cfd722089cc923ce6
|
json_serialization;https://github.com/status-im/nim-json-serialization@#a7d815ed92f200f490c95d3cfd722089cc923ce6
|
||||||
metrics;https://github.com/status-im/nim-metrics@#21e99a2e9d9f80e68bef65c80ef781613005fccb
|
metrics;https://github.com/status-im/nim-metrics@#21e99a2e9d9f80e68bef65c80ef781613005fccb
|
||||||
nimcrypto;https://github.com/cheatfate/nimcrypto@#24e006df85927f64916e60511620583b11403178
|
nimcrypto;https://github.com/cheatfate/nimcrypto@#4014ef939b51e02053c2e16dd3481d47bc9267dd
|
||||||
secp256k1;https://github.com/status-im/nim-secp256k1@#fd173fdff863ce2e211cf64c9a03bc7539fe40b0
|
secp256k1;https://github.com/status-im/nim-secp256k1@#fd173fdff863ce2e211cf64c9a03bc7539fe40b0
|
||||||
serialization;https://github.com/status-im/nim-serialization@#d77417cba6896c26287a68e6a95762e45a1b87e5
|
serialization;https://github.com/status-im/nim-serialization@#5b7cea55efeb074daa8abd8146a03a34adb4521a
|
||||||
stew;https://github.com/status-im/nim-stew@#7184d2424dc3945657884646a72715d494917aad
|
stew;https://github.com/status-im/nim-stew@#407a59883691d362db2fe8eab7f7c3b1f75112ff
|
||||||
testutils;https://github.com/status-im/nim-testutils@#dfc4c1b39f9ded9baf6365014de2b4bfb4dafc34
|
testutils;https://github.com/status-im/nim-testutils@#dfc4c1b39f9ded9baf6365014de2b4bfb4dafc34
|
||||||
unittest2;https://github.com/status-im/nim-unittest2@#da8398c45cafd5bd7772da1fc96e3924a18d3823
|
unittest2;https://github.com/status-im/nim-unittest2@#da8398c45cafd5bd7772da1fc96e3924a18d3823
|
||||||
websock;https://github.com/status-im/nim-websock@#691f069b209d372b1240d5ae1f57fb7bbafeaba7
|
websock;https://github.com/status-im/nim-websock@#fea05cde8b123b38d1a0a8524b77efbc84daa848
|
||||||
zlib;https://github.com/status-im/nim-zlib@#6a6670afba6b97b29b920340e2641978c05ab4d8
|
zlib;https://github.com/status-im/nim-zlib@#826e2fc013f55b4478802d4f2e39f187c50d520a
|
|
@ -42,6 +42,7 @@ type
|
||||||
servers*: seq[StreamServer]
|
servers*: seq[StreamServer]
|
||||||
clients: array[Direction, seq[StreamTransport]]
|
clients: array[Direction, seq[StreamTransport]]
|
||||||
flags: set[ServerFlags]
|
flags: set[ServerFlags]
|
||||||
|
clientFlags: set[TransportFlags]
|
||||||
acceptFuts: seq[Future[StreamTransport]]
|
acceptFuts: seq[Future[StreamTransport]]
|
||||||
|
|
||||||
TcpTransportTracker* = ref object of TrackerBase
|
TcpTransportTracker* = ref object of TrackerBase
|
||||||
|
@ -131,6 +132,11 @@ proc new*(
|
||||||
|
|
||||||
let transport = T(
|
let transport = T(
|
||||||
flags: flags,
|
flags: flags,
|
||||||
|
clientFlags:
|
||||||
|
if ServerFlags.TcpNoDelay in flags:
|
||||||
|
{TransportFlags.TcpNoDelay}
|
||||||
|
else:
|
||||||
|
default(set[TransportFlags]),
|
||||||
upgrader: upgrade)
|
upgrader: upgrade)
|
||||||
|
|
||||||
return transport
|
return transport
|
||||||
|
@ -253,7 +259,7 @@ method dial*(
|
||||||
|
|
||||||
trace "Dialing remote peer", address = $address
|
trace "Dialing remote peer", address = $address
|
||||||
|
|
||||||
let transp = await connect(address)
|
let transp = await connect(address, flags = self.clientFlags)
|
||||||
try:
|
try:
|
||||||
let observedAddr = await getObservedAddr(transp)
|
let observedAddr = await getObservedAddr(transp)
|
||||||
return await self.connHandler(transp, Opt.some(observedAddr), Direction.Out)
|
return await self.connHandler(transp, Opt.some(observedAddr), Direction.Out)
|
||||||
|
|
|
@ -19,6 +19,12 @@ template public* {.pragma.}
|
||||||
const
|
const
|
||||||
ShortDumpMax = 12
|
ShortDumpMax = 12
|
||||||
|
|
||||||
|
template compilesOr*(a, b: untyped): untyped =
|
||||||
|
when compiles(a):
|
||||||
|
a
|
||||||
|
else:
|
||||||
|
b
|
||||||
|
|
||||||
func shortLog*(item: openArray[byte]): string =
|
func shortLog*(item: openArray[byte]): string =
|
||||||
if item.len <= ShortDumpMax:
|
if item.len <= ShortDumpMax:
|
||||||
result = item.toHex()
|
result = item.toHex()
|
||||||
|
|
|
@ -14,7 +14,7 @@ else:
|
||||||
|
|
||||||
## This module implements wire network connection procedures.
|
## This module implements wire network connection procedures.
|
||||||
import chronos, stew/endians2
|
import chronos, stew/endians2
|
||||||
import multiaddress, multicodec, errors
|
import multiaddress, multicodec, errors, utility
|
||||||
|
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
import winlean
|
import winlean
|
||||||
|
@ -76,7 +76,8 @@ proc initTAddress*(ma: MultiAddress): MaResult[TransportAddress] =
|
||||||
proc connect*(
|
proc connect*(
|
||||||
ma: MultiAddress,
|
ma: MultiAddress,
|
||||||
bufferSize = DefaultStreamBufferSize,
|
bufferSize = DefaultStreamBufferSize,
|
||||||
child: StreamTransport = nil): Future[StreamTransport]
|
child: StreamTransport = nil,
|
||||||
|
flags = default(set[TransportFlags])): Future[StreamTransport]
|
||||||
{.raises: [Defect, LPError, MaInvalidAddress].} =
|
{.raises: [Defect, LPError, MaInvalidAddress].} =
|
||||||
## Open new connection to remote peer with address ``ma`` and create
|
## Open new connection to remote peer with address ``ma`` and create
|
||||||
## new transport object ``StreamTransport`` for established connection.
|
## new transport object ``StreamTransport`` for established connection.
|
||||||
|
@ -86,7 +87,13 @@ proc connect*(
|
||||||
if not(RTRANSPMA.match(ma)):
|
if not(RTRANSPMA.match(ma)):
|
||||||
raise newException(MaInvalidAddress, "Incorrect or unsupported address!")
|
raise newException(MaInvalidAddress, "Incorrect or unsupported address!")
|
||||||
|
|
||||||
return connect(initTAddress(ma).tryGet(), bufferSize, child)
|
let transportAddress = initTAddress(ma).tryGet()
|
||||||
|
|
||||||
|
compilesOr:
|
||||||
|
return connect(transportAddress, bufferSize, child, flags)
|
||||||
|
do:
|
||||||
|
# support for older chronos versions
|
||||||
|
return connect(transportAddress, bufferSize, child)
|
||||||
|
|
||||||
proc createStreamServer*[T](ma: MultiAddress,
|
proc createStreamServer*[T](ma: MultiAddress,
|
||||||
cbproc: StreamCallback,
|
cbproc: StreamCallback,
|
||||||
|
|
Loading…
Reference in New Issue