Feature #4906 ยป add_socket.1_9.patch
| include/ruby/win32.h (working copy) | ||
|---|---|---|
| extern rb_pid_t rb_w32_pipe_exec(const char *, const char *, int, int *, int *); | ||
| extern int flock(int fd, int oper); | ||
| extern int rb_w32_has_cancel_io(void); | ||
| extern int rb_w32_add_socket(SOCKET, int); | ||
| extern void rb_w32_remove_socket(int); | ||
| extern int rb_w32_is_socket(int); | ||
| extern int WSAAPI rb_w32_accept(int, struct sockaddr *, int *); | ||
| extern int WSAAPI rb_w32_bind(int, const struct sockaddr *, int); | ||
| win32/win32.c (working copy) | ||
|---|---|---|
| } | ||
| #endif | ||
| int | ||
| rb_w32_add_socket(SOCKET sock, int flag) | ||
| { | ||
| int fd = rb_w32_open_osfhandle(sock, O_RDWR|O_BINARY|O_NOINHERIT); | ||
| if (fd != -1) { | ||
| st_insert(socklist, (st_data_t)sock, (st_data_t)flag); | ||
| } | ||
| return fd; | ||
| } | ||
| void | ||
| rb_w32_remove_socket(int fd) | ||
| { | ||
| SOCKET sock = TO_SOCKET(fd); | ||
| st_data_t key = (st_data_t)sock; | ||
| st_delete(socklist, &key, NULL); | ||
| _set_osfhnd(fd, (SOCKET)INVALID_HANDLE_VALUE); | ||
| _close(fd); | ||
| } | ||
| #undef getsockopt | ||
| static int | ||