diff options
author | kotas <kotas.nico@gmail.com> | 2012-10-04 17:18:18 +0400 |
---|---|---|
committer | kotas <kotas.nico@gmail.com> | 2012-10-04 17:18:18 +0400 |
commit | 3764a6cd800c20db3aa18e4ddb094e5cb44a72db (patch) | |
tree | 456a639cd6ef3957f73a7033b51a0b08991c46fd /library.c | |
parent | 7dfac44c8fab2be6e5bf190e7e0cf9221669a1de (diff) |
add Redis::OPT_READ_TIMEOUT option for issue #70
Diffstat (limited to 'library.c')
-rw-r--r-- | library.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -841,6 +841,7 @@ PHPAPI RedisSock* redis_sock_create(char *host, int host_len, unsigned short por redis_sock->port = port; redis_sock->timeout = timeout; + redis_sock->read_timeout = timeout; redis_sock->serializer = REDIS_SERIALIZER_NONE; redis_sock->mode = ATOMIC; @@ -860,7 +861,7 @@ PHPAPI RedisSock* redis_sock_create(char *host, int host_len, unsigned short por */ PHPAPI int redis_sock_connect(RedisSock *redis_sock TSRMLS_DC) { - struct timeval tv, *tv_ptr = NULL; + struct timeval tv, read_tv, *tv_ptr = NULL; char *host = NULL, *persistent_id = NULL, *errstr = NULL; int host_len, err = 0; php_netstream_data_t *sock; @@ -876,6 +877,9 @@ PHPAPI int redis_sock_connect(RedisSock *redis_sock TSRMLS_DC) tv_ptr = &tv; } + read_tv.tv_sec = (time_t)redis_sock->read_timeout; + read_tv.tv_usec = (int)((redis_sock->read_timeout - read_tv.tv_sec) * 1000000); + if(redis_sock->host[0] == '/' && redis_sock->port < 1) { host_len = spprintf(&host, 0, "unix://%s", redis_sock->host); } else { @@ -915,9 +919,9 @@ PHPAPI int redis_sock_connect(RedisSock *redis_sock TSRMLS_DC) php_stream_auto_cleanup(redis_sock->stream); - if(tv.tv_sec != 0) { + if(read_tv.tv_sec != 0) { php_stream_set_option(redis_sock->stream, PHP_STREAM_OPTION_READ_TIMEOUT, - 0, &tv); + 0, &read_tv); } php_stream_set_option(redis_sock->stream, PHP_STREAM_OPTION_WRITE_BUFFER, |