Bug #50787 [Csd->ReO]: stream_set_write_buffer() has no effect on socket streams
| From: | cataphract@php.net | Date: | Wed, 16 Feb 2011 17:33:47 +0000 |
| Subject: | Bug #50787 [Csd->ReO]: stream_set_write_buffer() has no effect on socket streams | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-158812@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=50787&edit=1
ID: 50787
Updated by: cataphract@php.net
Reported by: vnegrier at optilian dot com
Summary: stream_set_write_buffer() has no effect on socket
streams
-Status: Closed
+Status: Re-Opened
Type: Bug
Package: Streams related
Operating System: linux
PHP Version: 5.3.1
-Assigned To:
+Assigned To: cataphract
Block user comment: N
Private report: N
New Comment:
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.
Previous Comments:
------------------------------------------------------------------------
[2010-02-03 20:21:40] svn@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] iliaa@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] svn@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