/usr/share/doc/libghc-network-doc/html/src/Network-Socket-Internal.html is in libghc-network-doc 2.6.3.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>dist-ghc/build/Network/Socket/Internal.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LINE 1 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-3"></a><span class='hs-comment'>{-# LINE 2 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-4"></a><span class='hs-comment'>{-# LANGUAGE ForeignFunctionInterface #-}</span>
<a name="line-5"></a><span class='hs-comment'>{-# OPTIONS_GHC -fno-warn-orphans #-}</span>
<a name="line-6"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-7"></a><span class='hs-comment'>-- |</span>
<a name="line-8"></a><span class='hs-comment'>-- Module : Network.Socket.Internal</span>
<a name="line-9"></a><span class='hs-comment'>-- Copyright : (c) The University of Glasgow 2001</span>
<a name="line-10"></a><span class='hs-comment'>-- License : BSD-style (see the file libraries/network/LICENSE)</span>
<a name="line-11"></a><span class='hs-comment'>--</span>
<a name="line-12"></a><span class='hs-comment'>-- Maintainer : libraries@haskell.org</span>
<a name="line-13"></a><span class='hs-comment'>-- Stability : provisional</span>
<a name="line-14"></a><span class='hs-comment'>-- Portability : portable</span>
<a name="line-15"></a><span class='hs-comment'>--</span>
<a name="line-16"></a><span class='hs-comment'>-- A module containing semi-public 'Network.Socket' internals.</span>
<a name="line-17"></a><span class='hs-comment'>-- Modules which extend the 'Network.Socket' module will need to use</span>
<a name="line-18"></a><span class='hs-comment'>-- this module while ideally most users will be able to make do with</span>
<a name="line-19"></a><span class='hs-comment'>-- the public interface.</span>
<a name="line-20"></a><span class='hs-comment'>--</span>
<a name="line-21"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-22"></a>
<a name="line-23"></a>
<a name="line-24"></a><span class='hs-comment'>{-# LINE 22 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-25"></a>
<a name="line-26"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Socket</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-27"></a> <span class='hs-layout'>(</span>
<a name="line-28"></a> <span class='hs-comment'>-- * Socket addresses</span>
<a name="line-29"></a> <span class='hs-conid'>HostAddress</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-comment'>{-# LINE 28 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-32"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>HostAddress6</span>
<a name="line-33"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>FlowInfo</span>
<a name="line-34"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ScopeID</span>
<a name="line-35"></a>
<a name="line-36"></a><span class='hs-comment'>{-# LINE 32 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-37"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>PortNumber</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-38"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SockAddr</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-39"></a>
<a name="line-40"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>peekSockAddr</span>
<a name="line-41"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>pokeSockAddr</span>
<a name="line-42"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sizeOfSockAddr</span>
<a name="line-43"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sizeOfSockAddrByFamily</span>
<a name="line-44"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>withSockAddr</span>
<a name="line-45"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>withNewSockAddr</span>
<a name="line-46"></a>
<a name="line-47"></a> <span class='hs-comment'>-- * Protocol families</span>
<a name="line-48"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Family</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-49"></a>
<a name="line-50"></a> <span class='hs-comment'>-- * Socket error functions</span>
<a name="line-51"></a>
<a name="line-52"></a><span class='hs-comment'>{-# LINE 49 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-53"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>throwSocketError</span>
<a name="line-54"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>throwSocketErrorCode</span>
<a name="line-55"></a>
<a name="line-56"></a> <span class='hs-comment'>-- * Guards for socket operations that may fail</span>
<a name="line-57"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>throwSocketErrorIfMinus1_</span>
<a name="line-58"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>throwSocketErrorIfMinus1Retry</span>
<a name="line-59"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>throwSocketErrorIfMinus1Retry_</span>
<a name="line-60"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>throwSocketErrorIfMinus1RetryMayBlock</span>
<a name="line-61"></a>
<a name="line-62"></a> <span class='hs-comment'>-- ** Guards that wait and retry if the operation would block</span>
<a name="line-63"></a> <span class='hs-comment'>-- | These guards are based on 'throwSocketErrorIfMinus1RetryMayBlock'.</span>
<a name="line-64"></a> <span class='hs-comment'>-- They wait for socket readiness if the action fails with @EWOULDBLOCK@</span>
<a name="line-65"></a> <span class='hs-comment'>-- or similar.</span>
<a name="line-66"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>throwSocketErrorWaitRead</span>
<a name="line-67"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>throwSocketErrorWaitWrite</span>
<a name="line-68"></a>
<a name="line-69"></a> <span class='hs-comment'>-- * Initialization</span>
<a name="line-70"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>withSocketsDo</span>
<a name="line-71"></a>
<a name="line-72"></a> <span class='hs-comment'>-- * Low-level helpers</span>
<a name="line-73"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>zeroMemory</span>
<a name="line-74"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-75"></a>
<a name="line-76"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwErrno</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwErrnoIfMinus1Retry</span><span class='hs-layout'>,</span>
<a name="line-77"></a> <span class='hs-varid'>throwErrnoIfMinus1RetryMayBlock</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwErrnoIfMinus1_</span><span class='hs-layout'>,</span>
<a name="line-78"></a> <span class='hs-conid'>Errno</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>errnoToIOError</span><span class='hs-layout'>)</span>
<a name="line-79"></a>
<a name="line-80"></a><span class='hs-comment'>{-# LINE 79 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-81"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>C</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span> <span class='hs-layout'>(</span><span class='hs-conid'>CInt</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-82"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>GHC</span><span class='hs-varop'>.</span><span class='hs-conid'>Conc</span> <span class='hs-layout'>(</span><span class='hs-varid'>threadWaitRead</span><span class='hs-layout'>,</span> <span class='hs-varid'>threadWaitWrite</span><span class='hs-layout'>)</span>
<a name="line-83"></a>
<a name="line-84"></a>
<a name="line-85"></a><span class='hs-comment'>{-# LINE 94 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-86"></a>
<a name="line-87"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Socket</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span>
<a name="line-88"></a>
<a name="line-89"></a><span class='hs-comment'>-- ---------------------------------------------------------------------</span>
<a name="line-90"></a><span class='hs-comment'>-- Guards for socket operations that may fail</span>
<a name="line-91"></a>
<a name="line-92"></a><a name="throwSocketError"></a><span class='hs-comment'>-- | Throw an 'IOError' corresponding to the current socket error.</span>
<a name="line-93"></a><span class='hs-definition'>throwSocketError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ textual description of the error location</span>
<a name="line-94"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-95"></a>
<a name="line-96"></a><a name="throwSocketErrorCode"></a><span class='hs-comment'>-- | Like 'throwSocketError', but the error code is supplied as an argument.</span>
<a name="line-97"></a><span class='hs-comment'>--</span>
<a name="line-98"></a><span class='hs-comment'>-- On Windows, do not use errno. Use a system error code instead.</span>
<a name="line-99"></a><span class='hs-definition'>throwSocketErrorCode</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CInt</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-100"></a>
<a name="line-101"></a><a name="throwSocketErrorIfMinus1_"></a><span class='hs-comment'>-- | Throw an 'IOError' corresponding to the current socket error if</span>
<a name="line-102"></a><span class='hs-comment'>-- the IO action returns a result of @-1@. Discards the result of the</span>
<a name="line-103"></a><span class='hs-comment'>-- IO action after error handling.</span>
<a name="line-104"></a><span class='hs-definition'>throwSocketErrorIfMinus1_</span>
<a name="line-105"></a> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-106"></a> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ textual description of the location</span>
<a name="line-107"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^ the 'IO' operation to be executed</span>
<a name="line-108"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-109"></a>
<a name="line-110"></a><span class='hs-comment'>{-# SPECIALIZE throwSocketErrorIfMinus1_ :: String -> IO CInt -> IO () #-}</span>
<a name="line-111"></a>
<a name="line-112"></a><a name="throwSocketErrorIfMinus1Retry"></a><span class='hs-comment'>-- | Throw an 'IOError' corresponding to the current socket error if</span>
<a name="line-113"></a><span class='hs-comment'>-- the IO action returns a result of @-1@, but retries in case of an</span>
<a name="line-114"></a><span class='hs-comment'>-- interrupted operation.</span>
<a name="line-115"></a><span class='hs-definition'>throwSocketErrorIfMinus1Retry</span>
<a name="line-116"></a> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-117"></a> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ textual description of the location</span>
<a name="line-118"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^ the 'IO' operation to be executed</span>
<a name="line-119"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-120"></a>
<a name="line-121"></a><span class='hs-comment'>{-# SPECIALIZE throwSocketErrorIfMinus1Retry :: String -> IO CInt -> IO CInt #-}</span>
<a name="line-122"></a>
<a name="line-123"></a><a name="throwSocketErrorIfMinus1Retry_"></a><span class='hs-comment'>-- | Throw an 'IOError' corresponding to the current socket error if</span>
<a name="line-124"></a><span class='hs-comment'>-- the IO action returns a result of @-1@, but retries in case of an</span>
<a name="line-125"></a><span class='hs-comment'>-- interrupted operation. Discards the result of the IO action after</span>
<a name="line-126"></a><span class='hs-comment'>-- error handling.</span>
<a name="line-127"></a><span class='hs-definition'>throwSocketErrorIfMinus1Retry_</span>
<a name="line-128"></a> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-129"></a> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ textual description of the location</span>
<a name="line-130"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^ the 'IO' operation to be executed</span>
<a name="line-131"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-132"></a><span class='hs-definition'>throwSocketErrorIfMinus1Retry_</span> <span class='hs-varid'>loc</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span>
<a name="line-133"></a> <span class='hs-varid'>throwSocketErrorIfMinus1Retry</span> <span class='hs-varid'>loc</span> <span class='hs-varid'>m</span> <span class='hs-varop'>>></span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-134"></a><span class='hs-comment'>{-# SPECIALIZE throwSocketErrorIfMinus1Retry_ :: String -> IO CInt -> IO () #-}</span>
<a name="line-135"></a>
<a name="line-136"></a><a name="throwSocketErrorIfMinus1RetryMayBlock"></a><span class='hs-comment'>-- | Throw an 'IOError' corresponding to the current socket error if</span>
<a name="line-137"></a><span class='hs-comment'>-- the IO action returns a result of @-1@, but retries in case of an</span>
<a name="line-138"></a><span class='hs-comment'>-- interrupted operation. Checks for operations that would block and</span>
<a name="line-139"></a><span class='hs-comment'>-- executes an alternative action before retrying in that case.</span>
<a name="line-140"></a><span class='hs-definition'>throwSocketErrorIfMinus1RetryMayBlock</span>
<a name="line-141"></a> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-142"></a> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ textual description of the location</span>
<a name="line-143"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>b</span> <span class='hs-comment'>-- ^ action to execute before retrying if an</span>
<a name="line-144"></a> <span class='hs-comment'>-- immediate retry would block</span>
<a name="line-145"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^ the 'IO' operation to be executed</span>
<a name="line-146"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-147"></a>
<a name="line-148"></a><span class='hs-comment'>{-# SPECIALIZE throwSocketErrorIfMinus1RetryMayBlock
<a name="line-149"></a> :: String -> IO b -> IO CInt -> IO CInt #-}</span>
<a name="line-150"></a>
<a name="line-151"></a>
<a name="line-152"></a><span class='hs-comment'>{-# LINE 160 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-153"></a>
<a name="line-154"></a><span class='hs-definition'>throwSocketErrorIfMinus1RetryMayBlock</span> <span class='hs-varid'>name</span> <span class='hs-varid'>on_block</span> <span class='hs-varid'>act</span> <span class='hs-keyglyph'>=</span>
<a name="line-155"></a> <span class='hs-varid'>throwErrnoIfMinus1RetryMayBlock</span> <span class='hs-varid'>name</span> <span class='hs-varid'>act</span> <span class='hs-varid'>on_block</span>
<a name="line-156"></a>
<a name="line-157"></a><span class='hs-definition'>throwSocketErrorIfMinus1Retry</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>throwErrnoIfMinus1Retry</span>
<a name="line-158"></a>
<a name="line-159"></a><span class='hs-definition'>throwSocketErrorIfMinus1_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>throwErrnoIfMinus1_</span>
<a name="line-160"></a>
<a name="line-161"></a><span class='hs-definition'>throwSocketError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>throwErrno</span>
<a name="line-162"></a>
<a name="line-163"></a><span class='hs-definition'>throwSocketErrorCode</span> <span class='hs-varid'>loc</span> <span class='hs-varid'>errno</span> <span class='hs-keyglyph'>=</span>
<a name="line-164"></a> <span class='hs-varid'>ioError</span> <span class='hs-layout'>(</span><span class='hs-varid'>errnoToIOError</span> <span class='hs-varid'>loc</span> <span class='hs-layout'>(</span><span class='hs-conid'>Errno</span> <span class='hs-varid'>errno</span><span class='hs-layout'>)</span> <span class='hs-conid'>Nothing</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-165"></a>
<a name="line-166"></a>
<a name="line-167"></a><span class='hs-comment'>{-# LINE 220 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-168"></a>
<a name="line-169"></a><a name="throwSocketErrorWaitRead"></a><span class='hs-comment'>-- | Like 'throwSocketErrorIfMinus1Retry', but if the action fails with</span>
<a name="line-170"></a><span class='hs-comment'>-- @EWOULDBLOCK@ or similar, wait for the socket to be read-ready,</span>
<a name="line-171"></a><span class='hs-comment'>-- and try again.</span>
<a name="line-172"></a><span class='hs-definition'>throwSocketErrorWaitRead</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Socket</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-173"></a><span class='hs-definition'>throwSocketErrorWaitRead</span> <span class='hs-varid'>sock</span> <span class='hs-varid'>name</span> <span class='hs-varid'>io</span> <span class='hs-keyglyph'>=</span>
<a name="line-174"></a> <span class='hs-varid'>throwSocketErrorIfMinus1RetryMayBlock</span> <span class='hs-varid'>name</span>
<a name="line-175"></a> <span class='hs-layout'>(</span><span class='hs-varid'>threadWaitRead</span> <span class='hs-varop'>$</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>sockFd</span> <span class='hs-varid'>sock</span><span class='hs-layout'>)</span>
<a name="line-176"></a> <span class='hs-varid'>io</span>
<a name="line-177"></a>
<a name="line-178"></a><a name="throwSocketErrorWaitWrite"></a><span class='hs-comment'>-- | Like 'throwSocketErrorIfMinus1Retry', but if the action fails with</span>
<a name="line-179"></a><span class='hs-comment'>-- @EWOULDBLOCK@ or similar, wait for the socket to be write-ready,</span>
<a name="line-180"></a><span class='hs-comment'>-- and try again.</span>
<a name="line-181"></a><span class='hs-definition'>throwSocketErrorWaitWrite</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>Socket</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-182"></a><span class='hs-definition'>throwSocketErrorWaitWrite</span> <span class='hs-varid'>sock</span> <span class='hs-varid'>name</span> <span class='hs-varid'>io</span> <span class='hs-keyglyph'>=</span>
<a name="line-183"></a> <span class='hs-varid'>throwSocketErrorIfMinus1RetryMayBlock</span> <span class='hs-varid'>name</span>
<a name="line-184"></a> <span class='hs-layout'>(</span><span class='hs-varid'>threadWaitWrite</span> <span class='hs-varop'>$</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>sockFd</span> <span class='hs-varid'>sock</span><span class='hs-layout'>)</span>
<a name="line-185"></a> <span class='hs-varid'>io</span>
<a name="line-186"></a>
<a name="line-187"></a><span class='hs-comment'>-- ---------------------------------------------------------------------------</span>
<a name="line-188"></a><span class='hs-comment'>-- WinSock support</span>
<a name="line-189"></a>
<a name="line-190"></a><a name="withSocketsDo"></a><span class='hs-comment'>{-| With older versions of the @network@ library on Windows operating systems,
<a name="line-191"></a>the networking subsystem must be initialised using 'withSocketsDo' before
<a name="line-192"></a>any networking operations can be used. eg.
<a name="line-193"></a>
<a name="line-194"></a>> main = withSocketsDo $ do {...}
<a name="line-195"></a>
<a name="line-196"></a>It is fine to nest calls to 'withSocketsDo', and to perform networking operations
<a name="line-197"></a>after 'withSocketsDo' has returned.
<a name="line-198"></a>
<a name="line-199"></a>In newer versions of the @network@ library it is only necessary to call
<a name="line-200"></a>'withSocketsDo' if you are calling the 'MkSocket' constructor directly.
<a name="line-201"></a>However, for compatibility with older versions on Windows, it is good practice
<a name="line-202"></a>to always call 'withSocketsDo' (it's very cheap).
<a name="line-203"></a>-}</span>
<a name="line-204"></a><span class='hs-comment'>{-# INLINE withSocketsDo #-}</span>
<a name="line-205"></a><span class='hs-definition'>withSocketsDo</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-206"></a>
<a name="line-207"></a><span class='hs-comment'>{-# LINE 259 "Network/Socket/Internal.hsc" #-}</span>
<a name="line-208"></a><span class='hs-definition'>withSocketsDo</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>
<a name="line-209"></a>
<a name="line-210"></a><span class='hs-comment'>{-# LINE 274 "Network/Socket/Internal.hsc" #-}</span>
</pre></body>
</html>
|