Packages

The Phi Programming Language

Current section

Files

Jump to
phi lib Network UDP.hm
Raw

lib/Network/UDP.hm

-----------------------------------------------------------------------------
-- |
-- Module : Network.UDP
-- Copyright : (c) 2020-2021 EMQ Technologies Co., Ltd.
-- License : BSD-style (see the LICENSE file)
--
-- Maintainer : Feng Lee, feng@emqx.io
-- Yang M, yangm@emqx.io
-- Stability : experimental
-- Portability : portable
--
-- The UDP Socket module.
--
-----------------------------------------------------------------------------
module Network.UDP
( open
, openWith
, recv
, recvTimeout
, send
, sendTo
, close
, controllingProcess
, Option(..)
, module Network.Inet
) where
import Control.Monad (IO)
import Data.Pid (Pid)
import Data.Timeout (Timeout)
import Data.Unit (Unit)
import Foreign (ffiIO1)
import Network.Inet
( Hostname
, IpAddress
, PortNumber
, Socket
)
data Option
= Active Boolean
| ActiveN Integer
| AddMembership IpAddress IpAddress
| Broadcast Boolean
| Buffer Integer
| Deliver Atom
| Dontroute Boolean
| DropMembership IpAddress IpAddress
| Header Integer
| HighMsgqWatermark Integer
| LowMsgqWatermark Integer
| MulticastIf IpAddress
| MulticastLoop Boolean
| MulticastTTL Integer
| Priority Integer
| Raw Integer Integer Binary
-- ^ Protocol OptionNum ValueBin
| ReadPackets Integer
| Recbuf Integer
| ReuseAddr Boolean
| Sndbuf Integer
| ToS Integer
| Tclass Integer
| TTL Integer
| RecvToS Boolean
| RecvTclass Boolean
| RecvTTL Boolean
| Ipv6only Boolean
foreign import open :: PortNumber -> IO Socket
foreign import openWith :: PortNumber -> [Option] -> IO Socket
foreign import recv
:: Socket -> Integer -> IO (IpAddress, PortNumber, Binary)
foreign import recvTimeout
:: Socket -> Integer -> Timeout -> IO (IpAddress, PortNumber, Binary)
foreign import send
:: Socket -> Hostname -> PortNumber -> Binary -> IO ()
foreign import sendTo
:: Socket -> IpAddress -> PortNumber -> Binary -> IO ()
close :: Socket -> IO ()
close = ffiIO1 :gen_udp :close
foreign import controllingProcess :: Socket -> Pid -> IO ()