git.iko.soy/distributed-process
on master help sign in
use vectored IO rather than mapM to send size header with message
commit32e3b042bf55a8b3db6559919e2883b3ceacd15a authorAdam C. Foltzer <acfoltzer@gmail.com> dateWed 22 Feb 2012, 17:54 (15 years ago) parent1e377ab
1 file changed+3−8
network-transport/src/Network/Transport/TCP.hs+3−8
network-transport/src/Network/Transport/TCP.hs+3−8
@@ -115,18 +115,13 @@ mkSourceEnd host service chanId = withSocketsDo $ do
115115 sock <- socket (addrFamily serverAddr) Stream defaultProtocol
116116 setSocketOption sock ReuseAddr 1
117117 N.connect sock (addrAddress serverAddr)
118−-- let sink = sinkSocket sock :: Sink ByteString IO ()
119118 NBS.sendAll sock $ encode (fromIntegral chanId :: Int64)
120119 return SourceEnd
121120 { send = {-# SCC "send" #-} \bss -> do
122121 let size = fromIntegral (sum . map BS.length $ bss) :: Int64
123− if size < 255
124− then
125− NBS.sendAll sock (encode (fromIntegral size :: Word8))
126− else do
127− NBS.sendAll sock (encode (255 :: Word8))
128− NBS.sendAll sock (encode size)
129− mapM_ (NBS.sendAll sock) bss
122+ sizeStr | size < 255 = encode (fromIntegral size :: Word8)
123+ | otherwise = BS.cons 255 (encode size)
124+ NBS.sendMany sock (sizeStr:bss)
130125 , closeSourceEnd = {-# SCC "closeSourceEnd" #-} sClose sock
131126 }
132127