| 1234567891011121314151617181920212223242526272829303132333435363738 | 
							- {-# LANGUAGE TypeSynonymInstances #-}
 
- module Network.UDP
 
- ( DataPacket(..)
 
- , openBoundUDPPort
 
- , openListeningUDPPort
 
- , pingUDPPort
 
- , sendUDPPacketTo
 
- , recvUDPPacket
 
- , recvUDPPacketFrom
 
- ) where
 
- import qualified Data.ByteString as Strict (ByteString, concat, singleton)
 
- import qualified Data.ByteString.Lazy as Lazy (ByteString, toChunks, fromChunks)
 
- import Data.ByteString.Char8 (pack, unpack)
 
- import Network.Socket hiding (sendTo, recv, recvFrom)
 
- import Network.Socket.ByteString (sendTo, recv, recvFrom)
 
- -- Type class for converting StringLike types to and from strict ByteStrings
 
- class DataPacket a where
 
-   toStrictBS :: a -> Strict.ByteString
 
-   fromStrictBS :: Strict.ByteString -> a
 
- instance DataPacket Strict.ByteString where
 
-   toStrictBS = id
 
-   {-# INLINE toStrictBS #-}
 
-   fromStrictBS = id
 
-   {-# INLINE fromStrictBS #-}
 
- openBoundUDPPort :: String -> Int -> IO Socket
 
- openBoundUDPPort uri port = do
 
-   s <- getUDPSocket
 
-   bindAddr <- inet_addr uri
 
-   let a = SockAddrInet (toEnum port) bindAddr
 
-   bindSocket s a
 
-   return s
 
- pingUDPPort :: Socket -> SockAddr -> IO ()
 
- pingUDPPort s a = sendTo s (Strict.singleton 0) a >> return ()
 
 
  |