Index: win32/win32.c =================================================================== --- win32/win32.c (revision 31999) +++ win32/win32.c (working copy) @@ -1927,6 +1927,19 @@ } #endif +int +rb_w32_add_socket(SOCKET sock, int flag) +{ + return rb_w32_open_osfhandle(sock, O_RDWR|O_BINARY|O_NOINHERIT); +} + +void +rb_w32_remove_socket(int fd) +{ + _set_osfhnd(fd, (SOCKET)INVALID_HANDLE_VALUE); + _close(fd); +} + #undef getsockopt static int Index: win32/win32.h =================================================================== --- win32/win32.h (revision 31999) +++ win32/win32.h (working copy) @@ -612,6 +612,8 @@ size_t rb_w32_write(int, const void *, size_t); int rb_w32_utime(const char *, struct utimbuf *); #define Sleep(msec) (void)rb_w32_sleep(msec) +int rb_w32_add_socket(SOCKET sock, int flag); +void rb_w32_remove_socket(int fd); /* == ***CAUTION***