[Haskell-cafe] non-blocking recv from UDP socket

Vo Minh Thu noteed at gmail.com
Thu Aug 26 05:13:44 EDT 2010


Is is possible to get Network.Socket.ByteString.recv to be
non-blocking (i.e. return directly even if no data is available) ?

I have tried ti use

  setSocketOption sock NoDelay 1

but then I get the following error:

  setSocketOption: unsupported operation (Protocol not available)

Here is the code if it may help (I'm on linux btw).

  sock <- socket AF_INET Datagram 17 -- 17 is IPPROTO_UDP
  addr <- inet_addr ""
  bindSocket sock (SockAddrInet 44004 addr)
  setSocketOption sock NoDelay 1 -- <-- doesn't seem to work

  addr <- inet_addr ""
  forever $ do
    sent <- sendTo sock "hello" (SockAddrInet 44005 addr)
    dat <- recv sock 5  -- <-- I'd like it to be non-blocking
    B.putStrLn dat
    threadDelay 1000000 -- 1 second


More information about the Haskell-Cafe mailing list