summaryrefslogtreecommitdiff
path: root/ext/socket/extconf.rb
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-02-28 21:31:35 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-02-28 21:31:35 +0000
commit4efd36bbd99cfc45997cd173cd543c369f386bc4 (patch)
treecd6641e7993654ccb8a89a2c913b1f9d9d01bf35 /ext/socket/extconf.rb
parentbf7037833dc9b17a4f1cf14cee44f9327b85189e (diff)
* ext/socket/extconf.rb (have_struct_member): new method.
check msg_control and msg_accrights in struct msghdr. check sys/uio.h. * socket/socket.c: include sys/uio.h if available. (thread_read_select): new function. (unix_send_io): ditto. (unix_recv_io): ditto. (unix_s_socketpair): ditto. (Init_socket): define UNIXSocket#send_io, UNIXSocket#recv_io, git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2150 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/socket/extconf.rb')
-rw-r--r--ext/socket/extconf.rb40
1 files changed, 40 insertions, 0 deletions
diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb
index c795d3f814..a306b3f9c5 100644
--- a/ext/socket/extconf.rb
+++ b/ext/socket/extconf.rb
@@ -2,6 +2,42 @@ require 'mkmf'
$CPPFLAGS += " -Dss_family=__ss_family -Dss_len=__ss_len"
+def have_struct_member(type, member, header=nil)
+ printf "checking for %s.%s... ", type, member
+ STDOUT.flush
+
+ libs = $libs
+ src =
+ if /mswin32|mingw/ =~ RUBY_PLATFORM
+ r = <<"SRC"
+#include <windows.h>
+#include <winsock.h>
+SRC
+ else
+ ""
+ end
+ unless header.nil?
+ header = [header] unless header.kind_of? Array
+ header.each {|h|
+ src << <<"SRC"
+#include <#{h}>
+SRC
+ }
+ end
+ src << <<"SRC"
+int main() { return 0; }
+int s = (char *)&((#{type}*)0)->#{member} - (char *)0;
+SRC
+ r = try_link(src, libs) # xxx try_compile is not available.
+ unless r
+ print "no\n"
+ return false
+ end
+ $defs.push(format("-DHAVE_ST_%s", member.upcase))
+ print "yes\n"
+ return true
+end
+
case RUBY_PLATFORM
when /mswin32|mingw/
test_func = "WSACleanup"
@@ -176,6 +212,9 @@ end
have_header("netinet/tcp.h") if not /cygwin/ === RUBY_PLATFORM # for cygwin 1.1.5
have_header("netinet/udp.h")
+have_struct_member('struct msghdr', 'msg_control', header=['sys/types.h', 'sys/socket.h'])
+have_struct_member('struct msghdr', 'msg_accrights', header=['sys/types.h', 'sys/socket.h'])
+
$getaddr_info_ok = false
if not enable_config("wide-getaddrinfo", false) and try_run(<<EOF)
#include <sys/types.h>
@@ -329,6 +368,7 @@ EOF
end
have_header("sys/un.h")
+have_header("sys/uio.h")
if have_func(test_func)
have_func("hsterror")