X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FSocketLike.hs;h=915f32376eb17a3ae6a57eef443648698bc4d63b;hb=70bf5bd248aa426ca4e410b3fb9a0529354aedaf;hp=f64e24bcad680f86d4ec3067f4f9d583558fcd68;hpb=f504167b85561373b4c444e2d37a513e0ab504a9;p=Lucu.git diff --git a/Network/HTTP/Lucu/SocketLike.hs b/Network/HTTP/Lucu/SocketLike.hs index f64e24b..915f323 100644 --- a/Network/HTTP/Lucu/SocketLike.hs +++ b/Network/HTTP/Lucu/SocketLike.hs @@ -1,3 +1,9 @@ +{-# LANGUAGE + FlexibleContexts + , FlexibleInstances + , TypeFamilies + , UnicodeSyntax + #-} module Network.HTTP.Lucu.SocketLike ( SocketLike(..) ) @@ -11,21 +17,28 @@ import qualified System.IO as I class (HandleLike (Handle s)) => SocketLike s where type Handle s :: * - accept :: s -> IO (Handle s, So.SockAddr) + accept :: s -> IO (Handle s, So.SockAddr) + socketPort :: s -> IO So.PortNumber instance SocketLike So.Socket where type Handle So.Socket = I.Handle + accept soSelf = do (soPeer, addr) <- So.accept soSelf hPeer <- So.socketToHandle soPeer I.ReadWriteMode return (hPeer, addr) + socketPort = So.socketPort + instance SocketLike (SSL.SSLContext, So.Socket) where type Handle (SSL.SSLContext, So.Socket) = SSL.SSL + accept (ctx, soSelf) = do (soPeer, addr) <- So.accept soSelf ssl <- SSL.connection ctx soPeer SSL.accept ssl return (ssl, addr) + + socketPort = So.socketPort . snd \ No newline at end of file