7 module Network.HTTP.Lucu.SocketLike
12 import qualified Network.Socket as So
13 import Network.HTTP.Lucu.HandleLike
14 import qualified OpenSSL.Session as SSL
15 import qualified System.IO as I
18 class (HandleLike (Handle s)) => SocketLike s where
20 accept :: s -> IO (Handle s, So.SockAddr)
21 socketPort :: s -> IO So.PortNumber
24 instance SocketLike So.Socket where
25 type Handle So.Socket = I.Handle
28 = do (soPeer, addr) <- So.accept soSelf
29 hPeer <- So.socketToHandle soPeer I.ReadWriteMode
32 socketPort = So.socketPort
35 instance SocketLike (SSL.SSLContext, So.Socket) where
36 type Handle (SSL.SSLContext, So.Socket) = SSL.SSL
39 = do (soPeer, addr) <- So.accept soSelf
40 ssl <- SSL.connection ctx soPeer
44 socketPort = So.socketPort . snd