module Linux.Socket ( -- * Types SocketFlags(..) -- * Message Flags , LST.dontWait , LST.truncate -- * Socket Flags , LST.closeOnExec , LST.nonblocking -- * Twiddle , applySocketFlags ) where import Prelude hiding (truncate) import Data.Bits ((.|.)) import Linux.Socket.Types (SocketFlags(..)) import Posix.Socket (Type(..)) import qualified Linux.Socket.Types as LST -- | Linux extends the @type@ argument of -- to accept -- flags. It is advisable to set @SOCK_CLOEXEC@ on when opening a socket -- on linux. For example, we may open a TCP Internet socket with: -- -- > uninterruptibleSocket internet (applySocketFlags closeOnExec stream) defaultProtocol -- -- To additionally open the socket in nonblocking mode -- (e.g. with @SOCK_NONBLOCK@): -- -- > uninterruptibleSocket internet (applySocketFlags (closeOnExec <> nonblocking) stream) defaultProtocol -- applySocketFlags :: SocketFlags -> Type -> Type applySocketFlags (SocketFlags s) (Type t) = Type (s .|. t)