[Haskell-cafe] Multicast receiver thread fails to receive last few messages

Ben Gunton ben.gunton at gmail.com
Tue Sep 23 15:58:24 UTC 2014


Thanks Kyle. Tried forking both (http://lpaste.net/111477), and also
receiving from the main thread while forking the sending, and the results
were the same... still not receiving the last bunch of lines.

On Tue, Sep 23, 2014 at 9:46 AM, Kyle Marek-Spartz <
kyle.marek.spartz at gmail.com> wrote:

> I would try forking your sending thread, too, rather than using the main
> thread for sending. Alternatively, use the main thread for receiving and
> fork your sending thread.
>
>> Kyle Marek-Spartz
>
>
>
>
>
> On Sep 23, 2014, 10:14:09 AM, Ben Gunton <ben.gunton at gmail.com> wrote:
> ------------------------------
>  I am trying to send multicast messages from one thread, and receive them
> on another. The sending thread reads lines from a file and sends them.
> However, the receiving thread does not receive all the messages - it seems
> to miss the last 10 message or so. If I run other programs to listen for
> the multicast message, they receive them fine. So I think the issue is
> something to do with receiving, not sending. I keep the program alive with
> a threadDelay, so it shouldn't be halting prematurely. If I add a small
> delay after each send, it works fine. And if I make the input file smaller,
> it works fine.
>
> On the provided data file, on my system (64-bit Ubuntu, GHC 7.8.2), the
> receiver fails to receive lines 125-140. Compiled with no optimizations.
>
> Thanks for any help!
>
> The relevant code snippets are below, and the sample data file and full
> program are attached.
>
>     -- Loop to receive all the packets
>     let receiveMulticast = do
>             (msg, _) <- recvFrom recvSock 32628
>             putStrLn . BS.unpack $ BS.take 100 msg
>             receiveMulticast
>     _ <- forkIO receiveMulticast
>
>     -- Send every line from a file as multicast message
>     inputFile <- openFile "data" ReadMode
>     fileLines <- BS.lines <$> BS.hGetContents inputFile
>     let sendMulticast msg = do
>             sendTo sendSock msg addr
>             -- Receiver FAILS to receive last few messages unless this
>             -- thread delay exists... why?!
>             -- threadDelay (1)
>     mapM_ sendMulticast fileLines
>     hClose inputFile
>
>     threadDelay (1000*1000*1000) -- Delay for 1000 seconds
>  ------------------------------
> - data, 71 KB
> - Main.hs, 2.2 KB
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140923/f39f6e07/attachment.html>


More information about the Haskell-Cafe mailing list