{-# LANGUAGE CPP #-}-- |-- Module : Network.Socket.ByteString.Lazy-- Copyright : (c) Bryan O'Sullivan 2009-- License : BSD-style---- Maintainer : bos@serpentine.com-- Stability : experimental-- Portability : POSIX, GHC---- This module provides access to the BSD /socket/ interface. This-- module is generally more efficient than the 'String' based network-- functions in 'Network.Socket'. For detailed documentation, consult-- your favorite POSIX socket reference. All functions communicate-- failures by converting the error number to 'System.IO.IOError'.---- This module is made to be imported with 'Network.Socket' like so:---- > import Network.Socket hiding (send, sendTo, recv, recvFrom)-- > import Network.Socket.ByteString.Lazy-- > import Prelude hiding (getContents)--moduleNetwork.Socket.ByteString.Lazy(-- * Send data to a socketsend ,sendAll ,-- * Receive data from a socketgetContents ,recv )whereimportControl.Monad(liftM)importData.ByteString.Lazy.Internal(ByteString(..),defaultChunkSize)importData.Int(Int64)importNetwork.Socket (Socket (..),ShutdownCmd (..),shutdown )importPreludehiding(getContents)importSystem.IO.Unsafe(unsafeInterleaveIO)importqualifiedData.ByteStringasSimportqualifiedNetwork.Socket.ByteString asN#if defined(mingw32_HOST_OS)importNetwork.Socket.ByteString.Lazy.Windows(send,sendAll)#elseimportNetwork.Socket.ByteString.Lazy.Posix (send ,sendAll )#endif-- ------------------------------------------------------------------------------- Receiving-- | Receive data from the socket. The socket must be in a connected-- state. Data is received on demand, in chunks; each chunk will be-- sized to reflect the amount of data received by individual 'recv'-- calls.---- All remaining data from the socket is consumed. When there is no-- more data to be received, the receiving side of the socket is shut-- down. If there is an error and an exception is thrown, the socket-- is not shut down.getContents::Socket -- ^ Connected socket->IOByteString-- ^ Data receivedgetContents sock =loop whereloop =unsafeInterleaveIO$dos <-N.recv sock defaultChunkSizeifS.nulls thenshutdown sock ShutdownReceive >>returnEmptyelseChunks `liftM`loop -- | Receive data from the socket. The socket must be in a connected-- state. This function may return fewer bytes than specified. If-- the received data is longer than the specified length, it may be-- discarded depending on the type of socket. This function may block-- until a message arrives.---- If there is no more data to be received, returns an empty 'ByteString'.---- Receiving data from closed socket may lead to undefined behaviour.recv::Socket -- ^ Connected socket->Int64-- ^ Maximum number of bytes to receive->IOByteString-- ^ Data receivedrecv sock nbytes =chunk `liftM`N.recv sock (fromIntegralnbytes )wherechunk k |S.nullk =Empty|otherwise=Chunkk Empty

AltStyle によって変換されたページ (->オリジナル) /