Skip to content

Commit a45df26

Browse files
committed
Require at least a full SDU from the kernel.
Use RecvLowWater to signal that we want to read at least the length of the SDU.
1 parent ade18ff commit a45df26

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

network-mux/src/Network/Mux/Bearer/Socket.hs

+6
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,14 @@ socketAsBearer sduSize batchSize readBuffer_m sduTimeout tracer sd =
123123
if BL.null availableData
124124
then do
125125
-- Not data in buffer; read more from socket
126+
when (not waitingOnNxtHeader) $
127+
-- Don't let the kernel wake us up until there is
128+
-- at least l bytes of data.
129+
Socket.setSocketOption sd Socket.RecvLowWater $ fromIntegral l
126130
newBuf <- recvFromSocket $ fromIntegral rbSize
127131
atomically $ modifyTVar rbVar (`BL.append` newBuf)
132+
when (not waitingOnNxtHeader) $
133+
Socket.setSocketOption sd Socket.RecvLowWater 1
128134
recvAtMost waitingOnNxtHeader l
129135
else do
130136
traceWith tracer $ Mx.TraceRecvEnd $ fromIntegral $ BL.length availableData

0 commit comments

Comments
 (0)