summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Wallner <mike@php.net>2010-03-11 16:37:24 +0000
committerMichael Wallner <mike@php.net>2010-03-11 16:37:24 +0000
commit5b277c4da0d9fb8bfb59186b61a884aaafffb861 (patch)
tree731162a91f47013eb20dddf6731268faff6d1e6d
parentb4e12967568457eea53b6195804f5e274052d06c (diff)
downloadphp-git-5b277c4da0d9fb8bfb59186b61a884aaafffb861.tar.gz
add backlock socket context option for stream_socket_server(),
which had a hardcoded backlog of 5 at two occurrances
-rw-r--r--main/streams/transports.c15
-rw-r--r--main/streams/xp_socket.c2
2 files changed, 15 insertions, 2 deletions
diff --git a/main/streams/transports.c b/main/streams/transports.c
index 42ac54d488..31b45f7018 100644
--- a/main/streams/transports.c
+++ b/main/streams/transports.c
@@ -157,7 +157,20 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, long namelen, int
ERR_RETURN(error_string, error_text, "bind() failed: %s");
failed = 1;
} else if (flags & STREAM_XPORT_LISTEN) {
- if (0 != php_stream_xport_listen(stream, 5, &error_text TSRMLS_CC)) {
+ zval **zbacklog = NULL;
+ int backlog = 32;
+
+ if (stream->context && php_stream_context_get_option(stream->context, "socket", "backlog", &zbacklog) == SUCCESS) {
+ zval *ztmp = *zbacklog;
+
+ convert_to_long_ex(&ztmp);
+ backlog = Z_LVAL_P(ztmp);
+ if (ztmp != *zbacklog) {
+ zval_ptr_dtor(&ztmp);
+ }
+ }
+
+ if (0 != php_stream_xport_listen(stream, backlog, &error_text TSRMLS_CC)) {
ERR_RETURN(error_string, error_text, "listen() failed: %s");
failed = 1;
}
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index 7d993f11a6..3b1eb87a30 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -324,7 +324,7 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
switch (xparam->op) {
case STREAM_XPORT_OP_LISTEN:
- xparam->outputs.returncode = (listen(sock->socket, 5) == 0) ? 0: -1;
+ xparam->outputs.returncode = (listen(sock->socket, xparam->inputs.backlog) == 0) ? 0: -1;
return PHP_STREAM_OPTION_RETURN_OK;
case STREAM_XPORT_OP_GET_NAME: