handle EINTR from connect()
authorMarko Kreen <markokr@gmail.com>
Fri, 4 Jan 2008 09:13:05 +0000 (09:13 +0000)
committerMarko Kreen <markokr@gmail.com>
Fri, 4 Jan 2008 09:13:05 +0000 (09:13 +0000)
src/sbuf.c

index 895959262792d6e6401928dc6580ae80157e6f31..ee9f667e8d59dd507517f59aef1b79edb0a9403b 100644 (file)
@@ -149,6 +149,7 @@ void sbuf_connect(SBuf *sbuf, const PgAddr *addr, const char *unix_dir, int time
        timeout.tv_usec = 0;
 
        /* launch connection */
+loop:
        res = connect(sock, sa, len);
        log_noise("connect(%d)=%d", sock, res);
        if (res == 0) {
@@ -158,6 +159,8 @@ void sbuf_connect(SBuf *sbuf, const PgAddr *addr, const char *unix_dir, int time
                /* tcp socket needs waiting */
                event_set(&sbuf->ev, sock, EV_WRITE, sbuf_connect_cb, sbuf);
                event_add(&sbuf->ev, &timeout);
+       } else if (res < 0 && errno == EINTR) {
+               goto loop;
        } else {
                /* failure */
                log_warning("connect failed: res=%d/err=%s", res, strerror(errno));