[Pkg-ofed-commits] [libfabric] 25/123: - Add retry for connection timeout - Set default backlog for listen - Fixes #1195
Ana Beatriz Guerrero López
ana at moszumanska.debian.org
Sat Oct 22 12:28:26 UTC 2016
This is an automated email from the git hooks/post-receive script.
ana pushed a commit to annotated tag v1.1.1
in repository libfabric.
commit 0f75747d0b0b4cad7c23340476cc5a46b4cb9a77
Author: Jithin Jose <jithin.jose at intel.com>
Date: Thu Aug 27 14:29:09 2015 -0700
- Add retry for connection timeout
- Set default backlog for listen
- Fixes #1195
Signed-off-by: Jithin Jose <jithin.jose at intel.com>
---
prov/sockets/src/sock.h | 1 +
prov/sockets/src/sock_conn.c | 41 +++++++++++++++++++++++++++++------------
2 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/prov/sockets/src/sock.h b/prov/sockets/src/sock.h
index fe23ffa..0a62d49 100644
--- a/prov/sockets/src/sock.h
+++ b/prov/sockets/src/sock.h
@@ -95,6 +95,7 @@
#define SOCK_CM_COMM_TIMEOUT (2000)
#define SOCK_EP_MAX_RETRY (5)
#define SOCK_EP_MAX_CM_DATA_SZ (256)
+#define SOCK_CM_DEF_BACKLOG (128)
#define SOCK_EP_RDM_PRI_CAP (FI_MSG | FI_RMA | FI_TAGGED | FI_ATOMICS | \
FI_NAMED_RX_CTX | \
diff --git a/prov/sockets/src/sock_conn.c b/prov/sockets/src/sock_conn.c
index 0e33ecd..3d7f4d6 100644
--- a/prov/sockets/src/sock_conn.c
+++ b/prov/sockets/src/sock_conn.c
@@ -181,6 +181,15 @@ static void sock_set_sockopt_reuseaddr(int sock)
SOCK_LOG_ERROR("setsockopt reuseaddr failed\n");
}
+void sock_set_sockopts_conn(int sock)
+{
+ int optval;
+ optval = 1;
+ sock_set_sockopt_reuseaddr(sock);
+ if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &optval, sizeof optval))
+ SOCK_LOG_ERROR("setsockopt nodelay failed\n");
+}
+
void sock_set_sockopts(int sock)
{
int optval;
@@ -205,6 +214,7 @@ int sock_conn_map_connect(struct sock_ep *ep,
socklen_t optlen;
fd_set fds;
struct sockaddr_in src_addr;
+ int do_retry = 5;
*index = 0;
conn_fd = socket(AF_INET, SOCK_STREAM, 0);
@@ -230,6 +240,7 @@ int sock_conn_map_connect(struct sock_ep *ep,
SOCK_LOG_DBG("Connecting using address:%s\n",
inet_ntoa(src_addr.sin_addr));
+retry:
if (connect(conn_fd, (struct sockaddr *) addr, sizeof *addr) < 0) {
if (errno == EINPROGRESS) {
/* timeout after 5 secs */
@@ -251,6 +262,11 @@ int sock_conn_map_connect(struct sock_ep *ep,
optval, strerror(optval));
goto err;
}
+ } else if (errno == ETIMEDOUT && do_retry) {
+ do_retry--;
+ SOCK_LOG_ERROR("Connect timed out, retrying - %s\n",
+ strerror(errno));
+ goto retry;
} else {
SOCK_LOG_ERROR("Error connecting %d - %s\n", errno,
strerror(errno));
@@ -269,16 +285,12 @@ int sock_conn_map_connect(struct sock_ep *ep,
}
do {
- ret = recv(conn_fd, &use_conn, sizeof(use_conn), 0);
+ ret = recv(conn_fd, &use_conn, sizeof(use_conn), MSG_WAITALL);
} while(ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK));
if (ret != sizeof(use_conn)) {
- if (ret == 0) {
- SOCK_LOG_DBG("Peer reset, use incoming connection\n");
- use_conn = 0;
- } else {
- SOCK_LOG_ERROR("Cannot exchange port: %d\n", ret);
- goto err;
- }
+ SOCK_LOG_ERROR("Cannot exchange port: %d - %s\n",
+ ret, strerror(errno));
+ use_conn = 0;
}
SOCK_LOG_DBG("Connect response: %d\n", use_conn);
@@ -366,15 +378,19 @@ static void *_sock_conn_listen(void *arg)
goto err;
}
+ sock_set_sockopts_conn(conn_fd);
SOCK_LOG_DBG("ACCEPT: %s, %d\n", inet_ntoa(remote.sin_addr),
ntohs(remote.sin_port));
do {
ret = recv(conn_fd, &remote.sin_port,
- sizeof(remote.sin_port), 0);
+ sizeof(remote.sin_port), MSG_WAITALL);
} while(ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK));
- if (ret != sizeof(remote.sin_port))
- SOCK_LOG_ERROR("Cannot exchange port\n");
+ if (ret != sizeof(remote.sin_port)) {
+ SOCK_LOG_ERROR("Cannot exchange port: %d - %s\n", ret, strerror(errno));
+ close(conn_fd);
+ continue;
+ }
SOCK_LOG_DBG("Remote port: %d\n", ntohs(remote.sin_port));
@@ -398,6 +414,7 @@ static void *_sock_conn_listen(void *arg)
shutdown(conn_fd, SHUT_RDWR);
close(conn_fd);
}
+ SOCK_LOG_DBG("Use conn: %d\n", use_conn);
}
err:
@@ -493,7 +510,7 @@ int sock_conn_listen(struct sock_ep *ep)
freeaddrinfo(rai);
}
- if (listen(listen_fd, 0)) {
+ if (listen(listen_fd, SOCK_CM_DEF_BACKLOG)) {
SOCK_LOG_ERROR("failed to listen socket: %s\n", strerror(errno));
goto err;
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ofed/libfabric.git
More information about the Pkg-ofed-commits
mailing list