X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_requestpool_object.c;h=43941bb84faee94c40b705663d243d444ee8004d;hp=48783c8d3c9f52158fb97f76c88a7a8d4f588131;hb=ad5f896b03adaa073134a00108a9cdf00720673a;hpb=a88a9ab5ca6e1aa2d2510c7ff3dda58d528602e5 diff --git a/http_requestpool_object.c b/http_requestpool_object.c index 48783c8..43941bb 100644 --- a/http_requestpool_object.c +++ b/http_requestpool_object.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2007, Michael Wallner | + | Copyright (c) 2004-2010, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -50,7 +50,9 @@ HTTP_END_ARGS; HTTP_EMPTY_ARGS(send); HTTP_EMPTY_ARGS(socketPerform); -HTTP_EMPTY_ARGS(socketSelect); +HTTP_BEGIN_ARGS(socketSelect, 0) + HTTP_ARG_VAL(timeout, 0) +HTTP_END_ARGS; HTTP_EMPTY_ARGS(valid); HTTP_EMPTY_ARGS(current); @@ -127,9 +129,13 @@ zend_object_value _http_requestpool_object_new(zend_class_entry *ce TSRMLS_DC) http_request_pool_init(&o->pool); +#if PHP_VERSION_ID < 50399 ALLOC_HASHTABLE(OBJ_PROP(o)); zend_hash_init(OBJ_PROP(o), zend_hash_num_elements(&ce->default_properties), NULL, ZVAL_PTR_DTOR, 0); zend_hash_copy(OBJ_PROP(o), &ce->default_properties, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); +#else + object_properties_init(&o->zo, ce); +#endif ov.handle = putObject(http_requestpool_object, o); ov.handlers = &http_requestpool_object_handlers; @@ -277,14 +283,23 @@ PHP_METHOD(HttpRequestPool, socketPerform) } /* }}} */ -/* {{{ proto protected bool HttpRequestPool::socketSelect() */ +/* {{{ proto protected bool HttpRequestPool::socketSelect([double timeout]) */ PHP_METHOD(HttpRequestPool, socketSelect) { + double timeout = 0; + struct timeval custom_timeout, *custom_timeout_ptr = NULL; getObject(http_requestpool_object, obj); - NO_ARGS; + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|d", &timeout)) { + RETURN_FALSE; + } + if (ZEND_NUM_ARGS() && timeout > 0) { + custom_timeout.tv_sec = (time_t) timeout; + custom_timeout.tv_usec = HTTP_USEC(timeout) % HTTP_MCROSEC; + custom_timeout_ptr = &custom_timeout; + } - RETURN_SUCCESS(http_request_pool_select(&obj->pool)); + RETURN_SUCCESS(http_request_pool_select_ex(&obj->pool, custom_timeout_ptr)); } /* }}} */