1 module Network.HTTP.Lucu.SocketLike
6 import qualified Network.Socket as So
7 import Network.HTTP.Lucu.HandleLike
8 import qualified OpenSSL.Session as SSL
9 import qualified System.IO as I
12 class (HandleLike (Handle s)) => SocketLike s where
14 accept :: s -> IO (Handle s, So.SockAddr)
15 socketPort :: s -> IO So.PortNumber
18 instance SocketLike So.Socket where
19 type Handle So.Socket = I.Handle
22 = do (soPeer, addr) <- So.accept soSelf
23 hPeer <- So.socketToHandle soPeer I.ReadWriteMode
26 socketPort = So.socketPort
29 instance SocketLike (SSL.SSLContext, So.Socket) where
30 type Handle (SSL.SSLContext, So.Socket) = SSL.SSL
33 = do (soPeer, addr) <- So.accept soSelf
34 ssl <- SSL.connection ctx soPeer
38 socketPort = So.socketPort . snd