11 #if defined(MakeOpenFile) && \
12 defined(HAVE_RB_IO_T) && (HAVE_RB_IO_T == 1) && \
13 defined(HAVE_RB_IO_ASCII8BIT_BINMODE) && \
14 defined(HAVE_ST_FD) && \
16 # define SOCK_FOR_FD (19)
17 # define FMODE_NOREVLOOKUP 0x100
18 #elif defined(MakeOpenFile) && \
19 (defined(OpenFile) || defined(HAVE_RB_IO_T)) && \
20 defined(HAVE_RB_FDOPEN) && \
21 defined(HAVE_ST_F) && \
22 defined(HAVE_ST_F2) && \
24 # define SOCK_FOR_FD (18)
26 # define SOCK_FOR_FD (-1)
29 #if SOCK_FOR_FD == 19 /* modeled after ext/socket/init.c */
30 static VALUE
sock_for_fd(VALUE klass
, int fd
)
35 rb_update_max_fd(fd
); /* 1.9.3+ API */
36 sock
= rb_obj_alloc(klass
);
37 MakeOpenFile(sock
, fp
);
39 fp
->mode
= FMODE_READWRITE
|FMODE_DUPLEX
|FMODE_NOREVLOOKUP
;
40 rb_io_ascii8bit_binmode(sock
);
41 rb_io_synchronized(fp
);
44 #elif SOCK_FOR_FD == 18 /* modeled after init_sock() in ext/socket/socket.c */
45 static VALUE
sock_for_fd(VALUE klass
, int fd
)
47 VALUE sock
= rb_obj_alloc(klass
);
50 MakeOpenFile(sock
, fp
);
51 fp
->f
= rb_fdopen(fd
, "r");
52 fp
->f2
= rb_fdopen(fd
, "w");
53 fp
->mode
= FMODE_READWRITE
;
54 rb_io_synchronized(fp
);
57 #else /* Rubinius, et al. */
59 static VALUE
sock_for_fd(VALUE klass
, int fd
)
61 return rb_funcall(klass
, id_for_fd
, 1, INT2NUM(fd
));
63 static void init_sock_for_fd(void)
65 id_for_fd
= rb_intern("for_fd");
67 #endif /* sock_for_fd */
69 # define init_sock_for_fd() for (;0;)
71 #endif /* SOCK_FOR_FD_H */