about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-04-03 19:59:31 +0000
committerEric Wong <e@80x24.org>2017-04-03 19:59:53 +0000
commit736776c02a2049dc62d47520602cbd9dcff0fa26 (patch)
treec9f078bc3a3493f991a878a525a67f4ef9e6338a
parent6ac65d63b31392b46dddc493237fbd526e32b12e (diff)
downloadyahns-736776c02a2049dc62d47520602cbd9dcff0fa26.tar.gz
On FreeBSD 10.3 (and presumably other *BSD TCP stacks, the value
of SO_KEEPALIVE returned by getsockopt is 8, even when set to
'1' via setsockopt.  Relax the test to only ensure the boolean
value is interpreted as "true".

Verified independently of Ruby using the following:
--------8<---------
	#include <sys/types.h>
	#include <sys/socket.h>
	#include <stdio.h>

static int err(const char *msg)
{
	perror(msg);
	return 1;
}

int main(void)
{
	int sv[2];
	int set = 1;
	int got;
	socklen_t len = (socklen_t) sizeof(int);
	int rc;

	rc = socketpair(PF_LOCAL, SOCK_STREAM, 0, sv);
	if (rc)
		return err("socketpair failed");

	rc = setsockopt(sv[0], SOL_SOCKET, SO_KEEPALIVE, &set, len);
	if (rc)
		return err("setsockopt failed");

	rc = getsockopt(sv[0], SOL_SOCKET, SO_KEEPALIVE, &got, &len);
	if (rc)
		return err("getsockopt failed");

	printf("got: %d\n", got);
	return 0;
}
-rw-r--r--test/test_bin.rb2
1 files changed, 1 insertions, 1 deletions
diff --git a/test/test_bin.rb b/test/test_bin.rb
index be1c024..af990ad 100644
--- a/test/test_bin.rb
+++ b/test/test_bin.rb
@@ -35,7 +35,7 @@ class TestBin < Testcase
       assert_equal "keep-alive", res["Connection"]
     end
 
-    assert_equal 1, @srv.getsockopt(:SOL_SOCKET, :SO_KEEPALIVE).int,
+    assert @srv.getsockopt(:SOL_SOCKET, :SO_KEEPALIVE).bool,
                  'ensure the inheriting process applies TCP socket options'
   ensure
     if pid