I made a wrong assumption in the first patch and although it worked, stream_set_write_buffer() did return an error.

This one is fixes the return value issue :

--- main/streams/xp_socket.c.orig       2007-12-01 16:56:29.000000000 +0100
+++ main/streams/xp_socket.c    2007-12-03 21:07:02.000000000 +0100
@@ -254,6 +254,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:
@@ -388,6 +389,14 @@
return PHP_STREAM_OPTION_RETURN_NOTIMPL;
                        }

+               case PHP_STREAM_OPTION_WRITE_BUFFER:
+                       if (ptrparam)
+                               size = *(size_t *)ptrparam;
+                       else
+                               size = CHUNK_SIZE;
+                       php_stream_set_chunk_size(stream, size);
+                       return PHP_STREAM_OPTION_RETURN_OK;
+
                default:
                        return PHP_STREAM_OPTION_RETURN_NOTIMPL;
        }



Hello,

Currently stream_set_write_buffer() only works with file streams. If used on socket streams it always returns -1 and does nothing. This can be quite problematic when using datagram sockets because any datagram bigger than the default 8Kb gets chopped and more than one datagram get sent, eventually messing up with the receiving side.

This small patch adds support for sockets in stream_set_write_buffer(), I have tested it and it fixed my problem, but if it needs refinements i'd be glad to try and help more.

diff against 5.2.5 is here: http://rectophobia.com/~six/socket_write_buffer.diff

Regards,
Vincent

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to