summaryrefslogtreecommitdiff
path: root/ext/socket
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-05-20 06:04:39 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-05-20 06:04:39 +0000
commitbaf9c47b3fc09a2a4b43e67e4feb01208056fb81 (patch)
treeab7850aecdade917256fc5570defd5303403d2a2 /ext/socket
parent4c36359dea36a28751659e34a7a11a311f349e76 (diff)
* ext/socket/socket.c: check SCM_RIGHTS macro addition to
the msg_control field to test existence of file descriptor passing by msg_control. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket')
-rw-r--r--ext/socket/socket.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index e344834921..0548a20016 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -1484,18 +1484,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;
@@ -1526,7 +1538,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;
@@ -1549,7 +1561,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;
@@ -1568,7 +1580,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;
@@ -1576,7 +1588,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;
@@ -1601,7 +1613,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;
@@ -1619,7 +1631,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 ||
@@ -1631,7 +1643,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