Blocking and Nonblocking Pipe Operations
The wait mode (blocking or nonblocking) of a pipe handle determines whether
the
ReadFile,
WriteFile, and
ConnectNamedPipe functions return immediately in situations that would otherwise require an
indefinite wait. By default, all named pipe handles returned by the
CreateNamedPipe or
CreateFile function are created with blocking-wait mode enabled. Nonblocking-wait mode
can be enabled for a server's pipe handle by specifying PIPE_NOWAIT in
CreateNamedPipe. Both server and client processes can change a pipe handle's wait mode by
specifying either PIPE_WAIT or PIPE_NOWAIT in a call to the
SetNamedPipeHandleState function.
Note that nonblocking-wait mode is supported for compatibility with Microsoft® LAN Manager version 2.0, and it should not be used to achieve overlapped
input and output (I/O) with named pipes. Overlapped I/O should be used instead
because it enables time-consuming
ReadFile,
WriteFile, and
ConnectNamedPipe operations to execute in the background after the function returns. For more
information about overlapped I/O, see
Synchronous and Overlapped Input and Output.
A
ReadFile operation is affected by the wait mode of a pipe handle when the pipe is
empty. With a blocking-wait handle, the operation is not completed successfully
until data is available from a thread writing to the other end of the pipe. Using
a nonblocking-wait handle, the function returns FALSE immediately, and the
GetLastError function returns ERROR_NO_DATA.
A
WriteFile operation is affected by a pipe handle's wait mode when there is insufficient
space in the pipe's buffer to hold all the data. With a blocking-wait handle,
the write operation cannot succeed until sufficient space is created in the
buffer by a thread reading from the other end of the pipe. With a nonblocking-wait
handle, the write operation returns TRUE immediately, without writing any
bytes (for a message-type pipe) or after writing as many bytes as the buffer holds
(for a byte-type pipe).
A
ConnectNamedPipe operation is affected by the wait mode of a pipe handle when there is no
client connected or waiting to connect to the pipe instance. With a blocking-wait
handle, the connect operation does not succeed until a client process connects
to the pipe instance by calling either the
CreateFile or
CallNamedPipe function. With a nonblocking-wait handle, the connect operation returns FALSE
immediately, and the
GetLastError function returns ERROR_PIPE_LISTENING.
The wait mode of a pipe handle does not affect read or write operations when
using the
TransactNamedPipe or
CallNamedPipe function.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database