[#39671] Ruby 1.8.1 on SX-6 — Masaki Hasegawa <masaki-h@...4u.or.jp>

はじめまして、長谷川 と申します。

16 messages 2004/05/19
[#39673] Re: Ruby 1.8.1 on SX-6 — Tanaka Akira <akr@...17n.org> 2004/05/19

In article <20040519.205107.102564296.suuchi29@naps.kishou.go.jp>,

[ruby-list:39689] Re: Ruby 1.8.1 on SX-6

From: Tanaka Akira <akr@...17n.org>
Date: 2004-05-20 04:35:45 UTC
List: ruby-list #39689
In article <20040520.015942.74726776.masaki-h@pp.iij4u.or.jp>,
  Masaki Hasegawa <masaki-h@pp.iij4u.or.jp> writes:

> ext/socket/socket.c において、HAVE_ST_MSG_CONTROL な場合には
> 存在するものとして扱われている struct cmsghdr について、その
> メンバ cmsg_len が使われていますので、これを条件としました。

どうも意図が明確に表現できていないと思うんですよねぇ。

ふと思ったのですが、もしそちらの環境で SCM_RIGHTS が定義されていなけれ
ば、次のようにするのがいいかも知れないと思いついたのですが、どうでしょ
う?

Index: ext/socket/socket.c
===================================================================
RCS file: /src/ruby/ext/socket/socket.c,v
retrieving revision 1.121
diff -u -p -r1.121 socket.c
--- ext/socket/socket.c	17 May 2004 07:17:31 -0000	1.121
+++ ext/socket/socket.c	20 May 2004 04:25:06 -0000
@@ -1530,18 +1530,30 @@ unix_recvfrom(argc, argv, sock)
     return s_recvfrom(sock, argc, argv, RECV_UNIX);
 }
 
+#if defined(HAVE_ST_MSG_CONTROL) && defined(SCM_RIGHTS)
+#define FD_PASSING_BY_MSG_CONTROL 1
+#else
+#define FD_PASSING_BY_MSG_CONTROL 0
+#endif
+
+#if defined(HAVE_ST_MSG_ACCRIGHTS)
+#define FD_PASSING_BY_MSG_ACCRIGHTS 1
+#else
+#define FD_PASSING_BY_MSG_ACCRIGHTS 0
+#endif
+
 static VALUE
 unix_send_io(sock, val)
     VALUE sock, val;
 {
-#if defined(HAVE_SENDMSG) && (defined(HAVE_ST_MSG_CONTROL) || defined(HAVE_ST_MSG_ACCRIGHTS))
+#if defined(HAVE_SENDMSG) && (FD_PASSING_BY_MSG_CONTROL || FD_PASSING_BY_MSG_ACCRIGHTS)
     int fd;
     OpenFile *fptr;
     struct msghdr msg;
     struct iovec vec[1];
     char buf[1];
 
-#if defined(HAVE_ST_MSG_CONTROL)
+#if FD_PASSING_BY_MSG_CONTROL
     struct {
 	struct cmsghdr hdr;
 	int fd;
@@ -1572,7 +1584,7 @@ unix_send_io(sock, val)
     msg.msg_iov = vec;
     msg.msg_iovlen = 1;
 
-#if defined(HAVE_ST_MSG_CONTROL)
+#if FD_PASSING_BY_MSG_CONTROL
     msg.msg_control = (caddr_t)&cmsg;
     msg.msg_controllen = sizeof(struct cmsghdr) + sizeof(int);
     msg.msg_flags = 0;
@@ -1595,7 +1607,7 @@ unix_send_io(sock, val)
 #endif
 }
 
-#if defined(HAVE_RECVMSG) && (defined(HAVE_ST_MSG_CONTROL) || defined(HAVE_ST_MSG_ACCRIGHTS))
+#if defined(HAVE_RECVMSG) && (FD_PASSING_BY_MSG_CONTROL || FD_PASSING_BY_MSG_ACCRIGHTS)
 static void
 thread_read_select(fd)
     int fd;
@@ -1614,7 +1626,7 @@ unix_recv_io(argc, argv, sock)
     VALUE *argv;
     VALUE sock;
 {
-#if defined(HAVE_RECVMSG) && (defined(HAVE_ST_MSG_CONTROL) || defined(HAVE_ST_MSG_ACCRIGHTS))
+#if defined(HAVE_RECVMSG) && (FD_PASSING_BY_MSG_CONTROL || FD_PASSING_BY_MSG_ACCRIGHTS)
     VALUE klass, mode;
     OpenFile *fptr;
     struct msghdr msg;
@@ -1622,7 +1634,7 @@ unix_recv_io(argc, argv, sock)
     char buf[1];
 
     int fd;
-#if defined(HAVE_ST_MSG_CONTROL)
+#if FD_PASSING_BY_MSG_CONTROL
     struct {
 	struct cmsghdr hdr;
 	int fd;
@@ -1647,7 +1659,7 @@ unix_recv_io(argc, argv, sock)
     msg.msg_iov = vec;
     msg.msg_iovlen = 1;
 
-#if defined(HAVE_ST_MSG_CONTROL)
+#if FD_PASSING_BY_MSG_CONTROL
     msg.msg_control = (caddr_t)&cmsg;
     msg.msg_controllen = sizeof(struct cmsghdr) + sizeof(int);
     msg.msg_flags = 0;
@@ -1665,7 +1677,7 @@ unix_recv_io(argc, argv, sock)
 	rb_sys_fail("recvmsg(2)");
 
     if (
-#if defined(HAVE_ST_MSG_CONTROL)
+#if FD_PASSING_BY_MSG_CONTROL
 	msg.msg_controllen != sizeof(struct cmsghdr) + sizeof(int) ||
         cmsg.hdr.cmsg_len != sizeof(struct cmsghdr) + sizeof(int) ||
 	cmsg.hdr.cmsg_level != SOL_SOCKET ||
@@ -1677,7 +1689,7 @@ unix_recv_io(argc, argv, sock)
 	rb_raise(rb_eSocket, "File descriptor was not passed");
     }
 
-#if defined(HAVE_ST_MSG_CONTROL)
+#if FD_PASSING_BY_MSG_CONTROL
     fd = cmsg.fd;
 #endif
 
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread