[PATCH] implement stream_set_write_buffer for sockets

php.internals

Vincent NEGRIER

18 years ago
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

Vincent NEGRIER

18 years ago
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; }