I started seeing a lot of these in the 2.0.45 build:
(22)Invalid argument: apr_socket_opt_set(SO_RCVBUF): Failed to set
ProxyReceiveBufferSize, using default
I dug into this and discovered to my suprise that the APR never implemented SO_RCVBUF
for the unix platform. Previous versions of the apr just ignored options it didn't
understand
but the most recent version now throws exceptions when it sees an unknown option.
This patch implements SO_RCVBUF support for apr_socket_opt_set on the unix platform.
It also
alters the response code on an unknown option to be APR_ENOTIMPL, which IMHO is a lot
clearer
than "invalid argument" and which would have saved me a hour or so of scratching my
head.
-adam
Index: sockopt.c
===================================================================
RCS file: /home/cvspublic/apr/network_io/unix/sockopt.c,v
retrieving revision 1.67
diff -u -r1.67 sockopt.c
--- sockopt.c 24 Feb 2003 23:13:29 -0000 1.67
+++ sockopt.c 4 Apr 2003 03:06:41 -0000
@@ -198,6 +198,18 @@
return APR_ENOTIMPL;
#endif
break;
+ case APR_SO_RCVBUF:
+#ifdef SO_RCVBUF
+ if (apr_is_option_set(sock->netmask, APR_SO_RCVBUF) != on) {
+ if (setsockopt(sock->socketdes, SOL_SOCKET, SO_RCVBUF, (void *)&on,
sizeof(int)) == -1) {
+ return errno;
+ }
+ apr_set_option(&sock->netmask, APR_SO_RCVBUF, on);
+ }
+#else
+ return APR_ENOTIMPL;
+#endif
+ break;
case APR_SO_NONBLOCK:
if (apr_is_option_set(sock->netmask, APR_SO_NONBLOCK) != on) {
if (on) {
@@ -326,7 +338,7 @@
#endif
break;
default:
- return APR_EINVAL;
+ return APR_ENOTIMPL;
}
return APR_SUCCESS;