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

Reply via email to