This file is indexed.

/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'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>CInt</span> <span class='hs-keyglyph'>-&gt;</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'>=&gt;</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'>-&gt;</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'>-&gt;</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 -&gt; IO CInt -&gt; 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'>=&gt;</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'>-&gt;</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'>-&gt;</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 -&gt; IO CInt -&gt; 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'>=&gt;</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'>-&gt;</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'>-&gt;</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'>&gt;&gt;</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-134"></a><span class='hs-comment'>{-# SPECIALIZE throwSocketErrorIfMinus1Retry_ :: String -&gt; IO CInt -&gt; 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'>=&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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 -&gt; IO b -&gt; IO CInt -&gt; 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'>=&gt;</span> <span class='hs-conid'>Socket</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</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'>=&gt;</span> <span class='hs-conid'>Socket</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</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>&gt; 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'>-&gt;</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>