Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Stream Functions : stream_set_blocking

stream_set_blocking

Set blocking/non-blocking mode on a stream (PHP 4 >= 4.3.0, PHP 5)
bool stream_set_blocking ( resource stream, int mode )

If mode is 0, the given stream will be switched to non-blocking mode, and if 1, it will be switched to blocking mode. This affects calls like fgets() and fread() that read from the stream. In non-blocking mode an fgets() call will always return right away while in blocking mode it will wait for data to become available on the stream.

Returns TRUE on success or FALSE on failure.

This function was previously called as set_socket_blocking() and later socket_set_blocking() but this usage is deprecated.

Note:

Prior to PHP 4.3, this function only worked on socket based streams. Since PHP 4.3, this function works for any stream that supports non-blocking mode (currently, regular files and socket streams).

See also stream_select().

Code Examples / Notes » stream_set_blocking

magicaltux

When you use fwrite() on a non-blocking stream, data isn't discarded silently as t dot starling said.
Remember that fwrite() returns an int, and this int represents the amount of data really written to the stream. So, if you see that fwrite() returns less than the amount of written data, it means you'll have to call fwrite() again in the future to write the remaining amount of data.
You can use stream_select() to wait for the stream to be available for writing, then continue writing data to the stream.
Non-blocking streams are useful as you can have more than one non-blocking stream, and wait for them to be available for writing.


t dot starling

Warning: if you write too much data to a stream in non-blocking mode and fill the buffer, the excess will be silently discarded. Observed in PHP 4.4.0 under linux.

galvao

Please notice that this function will not work as for PHP 5.2.0 at least on Win32 systems. It probably won't work on Linux boxes either.
PHP just ignores the function and blocking remains active.
For more information take a look at Bug #36918.


22-mar-2007 08:33

A concise description of Blocking vs. Non-blocking:
http://tinyurl.com/ype2j7
http://www.franz.com/support/documentation/7.0/ doc/streams.htm#block-non-block-3
5.2.1 Blocking behavior in simple-streams
There are three modes of blocking behavior when writing
items in a sequence to a stream or filling a sequence with items read from a stream. The issue is what to do when (for writing) the entire sequence cannot be written and (for reading) the entire sequence cannot be filled, but no EOF is encountered. (By `the entire sequence', we mean that part specified by start and end if those are supplied.) Here are the modes and a description of what happens in that mode if the whole operation does not complete and no EOF is encountered.
  1. Blocking mode: the system blocks (waits or hangs) until the operation can be completed.
  2. Blocking/Non-Blocking (B/NB) mode: the system only blocks on the first element of the sequence: if it cannot be written or read, the system blocks. If the first element is successfully written or read, and a subsequent element cannot be written or read, the function doing the writing/reading returns, typically with the return value(s) indicating exactly what was accomplished.
  3. Non-Blocking mode: the system never blocks. If an element cannot be written or read, the function doing the writing/reading returns, typically with the return value(s) indicating exactly what was accomplished.


Change Language


Follow Navioo On Twitter
stream_bucket_append
stream_bucket_make_writeable
stream_bucket_new
stream_bucket_prepend
stream_context_create
stream_context_get_default
stream_context_get_options
stream_context_set_option
stream_context_set_params
stream_copy_to_stream
stream_encoding
stream_filter_append
stream_filter_prepend
stream_filter_register
stream_filter_remove
stream_get_contents
stream_get_filters
stream_get_line
stream_get_meta_data
stream_get_transports
stream_get_wrappers
stream_register_wrapper
stream_resolve_include_path
stream_select
stream_set_blocking
stream_set_timeout
stream_set_write_buffer
stream_socket_accept
stream_socket_client
stream_socket_enable_crypto
stream_socket_get_name
stream_socket_pair
stream_socket_recvfrom
stream_socket_sendto
stream_socket_server
stream_socket_shutdown
stream_wrapper_register
stream_wrapper_restore
stream_wrapper_unregister
eXTReMe Tracker