From db192979f096d0153ad14e530e1e2e193289c7e0 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 22 Feb 2011 19:24:54 -0800 Subject: linux: add support for TCP_INFO reporting This returns a Raindrops::TCP_Info object that wraps a tcp_info struct. --- ext/raindrops/my_fileno.h | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 ext/raindrops/my_fileno.h (limited to 'ext/raindrops/my_fileno.h') diff --git a/ext/raindrops/my_fileno.h b/ext/raindrops/my_fileno.h new file mode 100644 index 0000000..bdf1a5f --- /dev/null +++ b/ext/raindrops/my_fileno.h @@ -0,0 +1,36 @@ +#include +#ifdef HAVE_RUBY_IO_H +# include +#else +# include +# include +#endif + +#if ! HAVE_RB_IO_T +# define rb_io_t OpenFile +#endif + +#ifdef GetReadFile +# define FPTR_TO_FD(fptr) (fileno(GetReadFile(fptr))) +#else +# if !HAVE_RB_IO_T || (RUBY_VERSION_MAJOR == 1 && RUBY_VERSION_MINOR == 8) +# define FPTR_TO_FD(fptr) fileno(fptr->f) +# else +# define FPTR_TO_FD(fptr) fptr->fd +# endif +#endif + +static int my_fileno(VALUE io) +{ + rb_io_t *fptr; + int fd; + + if (TYPE(io) != T_FILE) + io = rb_convert_type(io, T_FILE, "IO", "to_io"); + GetOpenFile(io, fptr); + fd = FPTR_TO_FD(fptr); + + if (fd < 0) + rb_raise(rb_eIOError, "closed stream"); + return fd; +} -- cgit v1.2.3-24-ge0c7