1#undef FD_SETSIZE 2/* redefine smaller size then default 64 */ 3#define FD_SETSIZE 32 4#include <ruby.h> 5 6static VALUE 7test_select(VALUE self) 8{ 9 int sd = socket(AF_INET, SOCK_DGRAM, 0); 10 struct timeval zero; 11 fd_set read; 12 fd_set write; 13 fd_set error; 14 15 zero.tv_sec = 0; 16 zero.tv_usec = 0; 17 18 FD_ZERO(&read); 19 FD_ZERO(&write); 20 FD_ZERO(&error); 21 22 FD_SET(sd, &read); 23 FD_SET(sd, &write); 24 FD_SET(sd, &error); 25 26 select(sd+1, &read, &write, &error, &zero); 27 28 return Qtrue; 29} 30 31static VALUE 32test_fdset(VALUE self) 33{ 34 int i; 35 fd_set set; 36 37 FD_ZERO(&set); 38 39 for (i = 0; i < FD_SETSIZE * 2; i++) { 40 int sd = socket(AF_INET, SOCK_DGRAM, 0); 41 FD_SET(sd, &set); 42 if (set.fd_count > FD_SETSIZE) { 43 return Qfalse; 44 } 45 } 46 return Qtrue; 47} 48 49void 50Init_fd_setsize(void) 51{ 52 VALUE m = rb_define_module_under(rb_define_module("Bug"), "Win32"); 53 rb_define_module_function(m, "test_select", test_select, 0); 54 rb_define_module_function(m, "test_fdset", test_fdset, 0); 55} 56