mirror of
https://github.com/php-win-ext/phpredis.git
synced 2026-03-24 09:02:07 +01:00
Added reconnect on timeout.
This commit is contained in:
@@ -128,6 +128,7 @@ typedef struct RedisSock_ {
|
||||
void
|
||||
add_constant_long(zend_class_entry *ce, char *name, int value);
|
||||
|
||||
PHPAPI void redis_check_eof(RedisSock *redis_sock TSRMLS_DC);
|
||||
PHPAPI RedisSock* redis_sock_create(char *host, int host_len, unsigned short port, long timeout);
|
||||
PHPAPI int redis_sock_connect(RedisSock *redis_sock TSRMLS_DC);
|
||||
PHPAPI int redis_sock_disconnect(RedisSock *redis_sock TSRMLS_DC);
|
||||
|
||||
20
redis.c
20
redis.c
@@ -338,8 +338,9 @@ PHPAPI char *redis_sock_read(RedisSock *redis_sock, int *buf_len TSRMLS_DC)
|
||||
{
|
||||
|
||||
char inbuf[1024];
|
||||
char *resp;
|
||||
char *resp = NULL;
|
||||
|
||||
redis_check_eof(redis_sock TSRMLS_CC);
|
||||
php_stream_gets(redis_sock->stream, inbuf, 1024);
|
||||
|
||||
switch(inbuf[0]) {
|
||||
@@ -385,6 +386,8 @@ PHPAPI char *redis_sock_read_bulk_reply(RedisSock *redis_sock, int bytes)
|
||||
|
||||
char * reply;
|
||||
|
||||
redis_check_eof(redis_sock TSRMLS_CC);
|
||||
|
||||
if (bytes == -1) {
|
||||
return NULL;
|
||||
} else {
|
||||
@@ -415,6 +418,7 @@ PHPAPI int redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAMETERS,
|
||||
char inbuf[1024], *response;
|
||||
int response_len;
|
||||
|
||||
redis_check_eof(redis_sock TSRMLS_CC);
|
||||
php_stream_gets(redis_sock->stream, inbuf, 1024);
|
||||
|
||||
if(inbuf[0] != '*') {
|
||||
@@ -443,10 +447,22 @@ PHPAPI int redis_sock_read_multibulk_reply(INTERNAL_FUNCTION_PARAMETERS,
|
||||
*/
|
||||
PHPAPI int redis_sock_write(RedisSock *redis_sock, char *cmd, size_t sz)
|
||||
{
|
||||
php_stream_write(redis_sock->stream, cmd, sz);
|
||||
redis_check_eof(redis_sock TSRMLS_CC);
|
||||
return php_stream_write(redis_sock->stream, cmd, sz);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
PHPAPI void redis_check_eof(RedisSock *redis_sock TSRMLS_DC) {
|
||||
int eof = php_stream_eof(redis_sock->stream);
|
||||
while(eof) {
|
||||
redis_sock->stream = NULL;
|
||||
redis_sock_connect(redis_sock TSRMLS_CC);
|
||||
eof = php_stream_eof(redis_sock->stream);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* redis_sock_get
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user