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]