| diff -up nfs-utils-1.3.0/support/nfs/rpc_socket.c.orig nfs-utils-1.3.0/support/nfs/rpc_socket.c |
| --- nfs-utils-1.3.0/support/nfs/rpc_socket.c.orig 2014-03-25 11:12:07.000000000 -0400 |
| +++ nfs-utils-1.3.0/support/nfs/rpc_socket.c 2016-04-28 11:37:53.694236000 -0400 |
| @@ -215,7 +215,7 @@ static int nfs_connect_nb(const int fd, |
| * use it later. |
| */ |
| ret = connect(fd, sap, salen); |
| - if (ret < 0 && errno != EINPROGRESS) { |
| + if (ret < 0 && errno != EINPROGRESS && errno != EINTR) { |
| ret = -1; |
| goto done; |
| } |
| @@ -227,10 +227,16 @@ static int nfs_connect_nb(const int fd, |
| FD_ZERO(&rset); |
| FD_SET(fd, &rset); |
| |
| - ret = select(fd + 1, NULL, &rset, NULL, timeout); |
| - if (ret <= 0) { |
| - if (ret == 0) |
| - errno = ETIMEDOUT; |
| + while ((ret = select(fd + 1, NULL, &rset, NULL, timeout)) < 0) { |
| + if (errno != EINTR) { |
| + ret = -1; |
| + goto done; |
| + } else { |
| + continue; |
| + } |
| + } |
| + if (ret == 0) { |
| + errno = ETIMEDOUT; |
| ret = -1; |
| goto done; |
| } |