summaryrefslogtreecommitdiffstats
path: root/ext/socket
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-06-24 23:31:29 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-06-24 23:31:29 +0000
commiteb166d591641c4caa1a6f6f27a2fa28a1c056814 (patch)
tree221b5ffeb34d4245ce1f652472cbc3ffe7039095 /ext/socket
parent652bac67c7a90b9a51fd7dd46c0d36332684f56a (diff)
downloadruby-eb166d591641c4caa1a6f6f27a2fa28a1c056814.tar.gz
ruby-eb166d591641c4caa1a6f6f27a2fa28a1c056814.tar.xz
ruby-eb166d591641c4caa1a6f6f27a2fa28a1c056814.zip
* eval.c (rb_thread_atfork): remove "fork terminates thread"
warning. [ruby-dev: * object.c (rb_obj_clone): backport FL_FINALIZE patch from 1.9. [ruby-core:02786][ruby-core:03067] * ext/socket/socket.c (sock_sockaddr): Socket#gethostbyname() should give us packed address, not struct sockaddr. [ruby-core:03053] git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6516 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket')
-rw-r--r--ext/socket/socket.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 2cf100cac..574bb3963 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -2044,7 +2044,24 @@ sock_sockaddr(addr, len)
struct sockaddr *addr;
size_t len;
{
- return rb_str_new((char*)addr, len);
+ char *ptr;
+
+ switch (addr->sa_family) {
+ case AF_INET:
+ ptr = (char*)&((struct sockaddr_in*)addr)->sin_addr.s_addr;
+ len = sizeof(((struct sockaddr_in*)addr)->sin_addr.s_addr);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ ptr = (char*)&((struct sockaddr_in6*)addr)->sin6_addr.s6_addr;
+ len = sizeof(((struct sockaddr_in6*)addr)->sin6_addr.s6_addr);
+ break;
+#endif
+ default:
+ rb_raise(rb_eSocket, "unknown socket family:%d", addr->sa_family);
+ break;
+ }
+ return rb_str_new(ptr, len);
}
static VALUE