Edit report at http://bugs.php.net/bug.php?id=50787&edit=1
ID: 50787 Updated by: cataphr...@php.net Reported by: vnegrier at optilian dot com Summary: stream_set_write_buffer() has no effect on socket streams Status: Re-Opened Type: Bug Package: Streams related Operating System: linux PHP Version: 5.3.1 Assigned To: cataphract Block user comment: N Private report: N New Comment: Just a few more comments: Strangely, PHP_STREAM_OPTION_WRITE_BUFFER also controls the flag PHP_STREAM_FLAG_NO_BUFFER, which is used only for reading (controls whether to keep a PHP read buffer or not), which is also a target of PHP_STREAM_OPTION_READ_BUFFER. So there's already some mixing of read and write semantics in PHP_STREAM_OPTION_WRITE_BUFFER. In any case, I still think this should be revisited. Previous Comments: ------------------------------------------------------------------------ [2011-02-16 18:33:46] cataphr...@php.net I'm reopening this because the fix makes the meaning of PHP_STREAM_OPTION_WRITE_BUFFER ambiguous. For the plain wrapper it's used as a wrapper for setvbuf and the only values it accepts are 0, 1 and 2, for _IOFBF, _IOLBF and _IONBF. For the socket stream, it's being used as a synonymous of PHP_STREAM_OPTION_SET_CHUNK_SIZE. This makes no sense, especially since the chunk size is also used for read buffering. I understand the problem, but this can't be the solution; I'm reverting this patch since setvbuf is specific to the stdio, but not without a solution first -- perhaps a new function to change the chunk size. ------------------------------------------------------------------------ [2010-02-03 20:21:40] s...@php.net Automatic comment from SVN on behalf of pajoye Revision: http://svn.php.net/viewvc/?view=revision&revision=294453 Log: - Fixed bug #50787 (stream_set_write_buffer() has no effect on socket streams). ------------------------------------------------------------------------ [2010-01-18 12:50:15] il...@php.net This bug has been fixed in SVN. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. ------------------------------------------------------------------------ [2010-01-18 12:50:09] s...@php.net Automatic comment from SVN on behalf of iliaa Revision: http://svn.php.net/viewvc/?view=revision&revision=293699 Log: Fixed bug #50787 (stream_set_write_buffer() has no effect on socket streams). ------------------------------------------------------------------------ [2010-01-17 19:03:31] vnegrier at optilian dot com Description: ------------ Socket streams do not implement the PHP_STREAM_OPTION_WRITE_BUFFER call, and the stream chunk size is always fixed at 8192 bytes. This is not a problem with SOCK_STREAM type sockets, but with SOCK_DGRAM is breaks the datagrams if they are more than 8192 bytes (which is IMHO a bug). Here is a patch against 5.3.1 to add support for stream_set_write_buffer() with socket streams: --- main/streams/xp_socket.c.orig 2010-01-17 19:56:39.000000000 +0100 +++ main/streams/xp_socket.c 2010-01-17 19:59:34.000000000 +0100 @@ -266,6 +266,7 @@ int oldmode, flags; php_netstream_data_t *sock = (php_netstream_data_t*)stream->abstract; php_stream_xport_param *xparam; + size_t size; switch(option) { case PHP_STREAM_OPTION_CHECK_LIVENESS: @@ -400,6 +401,14 @@ return PHP_STREAM_OPTION_RETURN_NOTIMPL; } + case PHP_STREAM_OPTION_WRITE_BUFFER: + if (ptrparam) + size = *(size_t *)ptrparam; + else + size = PHP_SOCK_CHUNK_SIZE; + php_stream_set_chunk_size(stream, size); + return PHP_STREAM_OPTION_RETURN_OK; + default: return PHP_STREAM_OPTION_RETURN_NOTIMPL; } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=50787&edit=1