--- a
+++ b/sighttpd-oggbuffersize.patch
@@ -0,0 +1,58 @@
+diff -rupN sighttpd-1.1.0/src/ogg-stdin.c sighttpd-1.1.0-buffer-patch/src/ogg-stdin.c
+--- sighttpd-1.1.0/src/ogg-stdin.c	2010-05-10 19:55:48.000000000 -0400
++++ sighttpd-1.1.0-buffer-patch/src/ogg-stdin.c	2013-06-03 05:58:49.767651809 -0400
+@@ -8,6 +8,7 @@
+ #include <sys/stat.h>
+ #include <sys/sendfile.h>
+ #include <fcntl.h>
++#include <errno.h>
+ #include <pthread.h>
+ #include <oggz/oggz.h>
+ 
+@@ -177,11 +178,11 @@ oggstdin_delete (void * data)
+ }
+ 
+ struct resource *
+-oggstdin_resource (const char * path, const char * content_type)
++oggstdin_resource (const char * path, const char * content_type, size_t len)
+ {
+ 	struct oggstdin * st = &oggstdin_pvt;
+         unsigned char * data, * headers;
+-        size_t len = 4096*16*32;
++        //size_t len = 4096*16*32;
+ 	size_t header_len = 10 * 1024;
+ 
+         if ((data = malloc (len)) == NULL) {
+@@ -220,16 +221,31 @@ oggstdin_resources (Dictionary * config)
+ 	list_t * l;
+ 	const char * path;
+ 	const char * ctype;
++	const char * buffersize;
++	size_t len;
+ 
+ 	l = list_new();
+ 
+ 	path = dictionary_lookup (config, "Path");
+ 	ctype = dictionary_lookup (config, "Type");
++	buffersize = dictionary_lookup (config, "BufferSize");
+ 
+ 	if (!ctype) ctype = DEFAULT_CONTENT_TYPE;
+ 
++	if(!buffersize) 
++	{
++		len = 4096*16*32;
++	} else { 
++		errno = 0;
++		len = (size_t)strtol(buffersize,NULL,10);
++		if(errno == ERANGE)
++			len = 4096*16*32;
++		if(len > (4096*4)) len = 4096*4;
++		len += len % (4096*4);
++	} 
++
+ 	if (path)
+-		l = list_append (l, oggstdin_resource (path, ctype));
++		l = list_append (l, oggstdin_resource (path, ctype, len));
+ 
+ 	return l;
+ }