summaryrefslogtreecommitdiffstats
path: root/sbin/ggate/shared
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2006-10-30 18:29:24 +0000
committerpjd <pjd@FreeBSD.org>2006-10-30 18:29:24 +0000
commit95289e010fb3674d4ab102b64dcae134233b1b1c (patch)
treecea99199e5516eee113ea8f84ad1c8f8eaeaf998 /sbin/ggate/shared
parent32ea778f9300b9a65af645813cfa3e2cb7cb0c79 (diff)
downloadFreeBSD-src-95289e010fb3674d4ab102b64dcae134233b1b1c.zip
FreeBSD-src-95289e010fb3674d4ab102b64dcae134233b1b1c.tar.gz
- Handle timeouts from recv(2) properly.
- Increase timeout to 8 seconds (should be made configurable). Reported by: Ulrich Spoerlein <uspoerlein@gmail.com> Reported by: Christian Laursen <xi@borderworlds.dk> PR: kern/104829 MFC after: 1 week
Diffstat (limited to 'sbin/ggate/shared')
-rw-r--r--sbin/ggate/shared/ggate.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sbin/ggate/shared/ggate.c b/sbin/ggate/shared/ggate.c
index c8428a6..5101092 100644
--- a/sbin/ggate/shared/ggate.c
+++ b/sbin/ggate/shared/ggate.c
@@ -250,8 +250,12 @@ g_gate_send(int s, const void *buf, size_t len, int flags)
ssize_t
g_gate_recv(int s, void *buf, size_t len, int flags)
{
+ ssize_t done;
- return (recv(s, buf, len, flags));
+ do {
+ done = recv(s, buf, len, flags);
+ } while (done == -1 && errno == EAGAIN);
+ return (done);
}
int nagle = 1;
@@ -280,7 +284,7 @@ g_gate_socket_settings(int sfd)
bsize = sndbuf;
if (setsockopt(sfd, SOL_SOCKET, SO_SNDBUF, &bsize, sizeof(bsize)) == -1)
g_gate_xlog("setsockopt(SO_SNDBUF): %s.", strerror(errno));
- tv.tv_sec = 1;
+ tv.tv_sec = 8;
tv.tv_usec = 0;
if (setsockopt(sfd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)) == -1) {
g_gate_log(LOG_ERR, "setsockopt(SO_SNDTIMEO) error: %s.",
OpenPOWER on IntegriCloud