fastopen: fix argument order in RDoc example
[kgio.git] / ext / kgio / sock_for_fd.h
blob55f9ccb0e77b2944d13c1b904cddb6150b8939bb
1 #ifndef SOCK_FOR_FD_H
2 #define SOCK_FOR_FD_H
3 #include <ruby.h>
4 #ifdef HAVE_RUBY_IO_H
5 # include <ruby/io.h>
6 #else
7 # include <stdio.h>
8 # include <rubyio.h>
9 #endif
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) && \
15 defined(HAVE_ST_MODE)
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) && \
23 defined(HAVE_ST_MODE)
24 # define SOCK_FOR_FD (18)
25 #else
26 # define SOCK_FOR_FD (-1)
27 #endif
29 #if SOCK_FOR_FD == 19 /* modeled after ext/socket/init.c */
30 static VALUE sock_for_fd(VALUE klass, int fd)
32 VALUE sock;
33 rb_io_t *fp;
35 rb_update_max_fd(fd); /* 1.9.3+ API */
36 sock = rb_obj_alloc(klass);
37 MakeOpenFile(sock, fp);
38 fp->fd = fd;
39 fp->mode = FMODE_READWRITE|FMODE_DUPLEX|FMODE_NOREVLOOKUP;
40 rb_io_ascii8bit_binmode(sock);
41 rb_io_synchronized(fp);
42 return sock;
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);
48 OpenFile *fp;
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);
55 return sock;
57 #else /* Rubinius, et al. */
58 static ID id_for_fd;
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 */
68 #if SOCK_FOR_FD > 0
69 # define init_sock_for_fd() for (;0;)
70 #endif
71 #endif /* SOCK_FOR_FD_H */