pgpool2.git / summary / log / commit / refs

commit    26be3e9e957176164a744175665f2dace2e70d4c
Author:   Yoshiyuki Asaba <y-asaba at pgfoundry.org>
Date:     Thu Apr 26 05:26:55 2007 +0000

    Retry connect() when it is interrupted by signal.


ChangeLog | 5 +++++ pool_connection_pool.c | 30 ++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3c070a113..89a448d65 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-04-26 Yoshiyuki Asaba <y-asaba@sraoss.co.jp> + + * pool_connection_pool.c: Retry connect() when it is interrupted + by signal. + 2007-04-20 Yoshiyuki Asaba <y-asaba@sraoss.co.jp> * pool_process_query.c: Enhance that the query that begins with diff --git a/pool_connection_pool.c b/pool_connection_pool.c index 7be3716d2..4f62cb671 100644 --- a/pool_connection_pool.c +++ b/pool_connection_pool.c @@ -423,11 +423,18 @@ int connect_unix_domain_socket_by_port(int port, char *socket_dir) snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/.s.PGSQL.%d", socket_dir, port); len = sizeof(struct sockaddr_un); - if (connect(fd, (struct sockaddr *)&addr, len) < 0) + for (;;) { - pool_error("connect_unix_domain_socket_by_port: connect() failed: %s", strerror(errno)); - close(fd); - return -1; + if (connect(fd, (struct sockaddr *)&addr, len) < 0) + { + if (errno == EINTR || errno == EAGAIN) + continue; + + pool_error("connect_unix_domain_socket_by_port: connect() failed: %s", strerror(errno)); + close(fd); + return -1; + } + break; } return fd; @@ -475,11 +482,18 @@ int connect_inet_domain_socket_by_port(char *host, int port) (char *) hp->h_addr, hp->h_length); - if (connect(fd, (struct sockaddr *)&addr, len) < 0) + for (;;) { - pool_error("connect_inet_domain_socket: connect() failed: %s",strerror(errno)); - close(fd); - return -1; + if (connect(fd, (struct sockaddr *)&addr, len) < 0) + { + if (errno == EINTR || errno == EAGAIN) + continue; + + pool_error("connect_inet_domain_socket: connect() failed: %s",strerror(errno)); + close(fd); + return -1; + } + break; } return fd; [parent: 9e887363923d]