From 7371736e49bcb7066651139654f91f0e0cb9ec5a Mon Sep 17 00:00:00 2001
From: akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date: Tue, 26 Mar 2013 14:34:20 +0000
Subject: [PATCH] * ext/socket/socket.c (sockaddr_len): return the shortest
 length for   unknown socket address.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
---
 ChangeLog           | 5 +++++
 ext/socket/socket.c | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 25dc188afb..dcab50d83b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Mar 26 22:31:10 2013  Tanaka Akira  <akr@fsij.org>
+
+	* ext/socket/socket.c (sockaddr_len): return the shortest length for
+	  unknown socket address.
+
 Tue Mar 26 22:14:46 2013  Tanaka Akira  <akr@fsij.org>
 
 	* thread.c (double2timeval): convert the infinity to TIME_MAX to avoid
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 1ddaea9594..32548944b2 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -1512,7 +1512,7 @@ sockaddr_len(struct sockaddr *addr)
 #endif
 
       default:
-        return (socklen_t)sizeof(struct sockaddr_in);
+        return (socklen_t)(offsetof(struct sockaddr, sa_family) + sizeof(addr->sa_family));
     }
 }