* win32/win32.c (rb_w32_open_osfhandle): adjust
rb_w32_open_osfhandle() with _open_osfhandle(). * win32/win32.c (rb_w32_accept, rb_w32_socket): return -1 on error. * win32/win32.h: should use file descriptor instead of SOCKET. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2908 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
62280094cd
commit
7345d0efd4
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
Sun Sep 29 18:30:24 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
|
||||||
|
|
||||||
|
* win32/win32.c (rb_w32_open_osfhandle): adjust
|
||||||
|
rb_w32_open_osfhandle() with _open_osfhandle().
|
||||||
|
|
||||||
|
* win32/win32.c (rb_w32_accept, rb_w32_socket): return -1 on
|
||||||
|
error.
|
||||||
|
|
||||||
|
* win32/win32.h: should use file descriptor instead of SOCKET.
|
||||||
|
|
||||||
Sun Sep 29 06:33:03 2002 NAKAMURA Usaku <usa@ruby-lang.org>
|
Sun Sep 29 06:33:03 2002 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* win32/win32.c (is_socket, rb_w32_select, rb_w32_accept, rb_w32_bind,
|
* win32/win32.c (is_socket, rb_w32_select, rb_w32_accept, rb_w32_bind,
|
||||||
|
233
win32/win32.c
233
win32/win32.c
@ -84,6 +84,8 @@ static char *str_grow(struct RString *str, size_t new_size);
|
|||||||
static DWORD wait_events(HANDLE event, DWORD timeout);
|
static DWORD wait_events(HANDLE event, DWORD timeout);
|
||||||
#ifndef __BORLANDC__
|
#ifndef __BORLANDC__
|
||||||
static int rb_w32_open_osfhandle(long osfhandle, int flags);
|
static int rb_w32_open_osfhandle(long osfhandle, int flags);
|
||||||
|
#else
|
||||||
|
#define rb_w32_open_osfhandle(osfhandle, flags) _open_osfhandle(osfhandle, flags)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *NTLoginName;
|
char *NTLoginName;
|
||||||
@ -430,7 +432,6 @@ SOCKET
|
|||||||
rb_w32_get_osfhandle(int fh)
|
rb_w32_get_osfhandle(int fh)
|
||||||
{
|
{
|
||||||
return _get_osfhandle(fh);
|
return _get_osfhandle(fh);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pid_t
|
pid_t
|
||||||
@ -508,16 +509,10 @@ pipe_exec(char *cmd, int mode, FILE **fpr, FILE **fpw)
|
|||||||
CloseHandle(hWriteOut);
|
CloseHandle(hWriteOut);
|
||||||
}
|
}
|
||||||
CloseHandle(hCurProc);
|
CloseHandle(hCurProc);
|
||||||
ret = 0;
|
|
||||||
} while (0));
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* create child process */
|
/* create child process */
|
||||||
child = CreateChild(cmd, &sa, NULL, NULL, NULL);
|
child = CreateChild(cmd, &sa, NULL, NULL, NULL);
|
||||||
if (!child) {
|
if (!child) {
|
||||||
RUBY_CRITICAL({
|
|
||||||
if (reading) {
|
if (reading) {
|
||||||
SetStdHandle(STD_OUTPUT_HANDLE, hSavedStdOut);
|
SetStdHandle(STD_OUTPUT_HANDLE, hSavedStdOut);
|
||||||
CloseHandle(hReadOut);
|
CloseHandle(hReadOut);
|
||||||
@ -528,13 +523,10 @@ pipe_exec(char *cmd, int mode, FILE **fpr, FILE **fpw)
|
|||||||
CloseHandle(hWriteIn);
|
CloseHandle(hWriteIn);
|
||||||
CloseHandle(hDupOutFile);
|
CloseHandle(hDupOutFile);
|
||||||
}
|
}
|
||||||
});
|
break;
|
||||||
return -1;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* restore STDIN/STDOUT */
|
/* restore STDIN/STDOUT */
|
||||||
RUBY_CRITICAL(do {
|
|
||||||
ret = -1;
|
|
||||||
if (reading) {
|
if (reading) {
|
||||||
if (!SetStdHandle(STD_OUTPUT_HANDLE, hSavedStdOut)) {
|
if (!SetStdHandle(STD_OUTPUT_HANDLE, hSavedStdOut)) {
|
||||||
errno = GetLastError();
|
errno = GetLastError();
|
||||||
@ -561,71 +553,61 @@ pipe_exec(char *cmd, int mode, FILE **fpr, FILE **fpw)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret = 0;
|
|
||||||
} while (0));
|
|
||||||
if (ret != 0) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reading) {
|
if (reading) {
|
||||||
#ifdef __BORLANDC__
|
fdin = rb_w32_open_osfhandle((long)hDupInFile,
|
||||||
fdin = _open_osfhandle((long)hDupInFile, (_O_RDONLY | pipemode));
|
(_O_RDONLY | pipemode));
|
||||||
#else
|
CloseHandle(hReadOut);
|
||||||
fdin = rb_w32_open_osfhandle((long)hDupInFile, (_O_RDONLY | pipemode));
|
if (fdin == -1) {
|
||||||
#endif
|
CloseHandle(hDupInFile);
|
||||||
CloseHandle(hReadOut);
|
if (writing) {
|
||||||
if (fdin == -1) {
|
CloseHandle(hWriteIn);
|
||||||
CloseHandle(hDupInFile);
|
CloseHandle(hDupOutFile);
|
||||||
if (writing) {
|
}
|
||||||
CloseHandle(hWriteIn);
|
CloseChildHandle(child);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (writing) {
|
||||||
|
fdout = rb_w32_open_osfhandle((long)hDupOutFile,
|
||||||
|
(_O_WRONLY | pipemode));
|
||||||
|
CloseHandle(hWriteIn);
|
||||||
|
if (fdout == -1) {
|
||||||
CloseHandle(hDupOutFile);
|
CloseHandle(hDupOutFile);
|
||||||
|
if (reading) {
|
||||||
|
_close(fdin);
|
||||||
|
}
|
||||||
|
CloseChildHandle(child);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
CloseChildHandle(child);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (writing) {
|
if (reading) {
|
||||||
#ifdef __BORLANDC__
|
sprintf(modes, "r%s", pipemode == O_BINARY ? "b" : "");
|
||||||
fdout = _open_osfhandle((long)hDupOutFile, (_O_WRONLY | pipemode));
|
if ((*fpr = (FILE *)fdopen(fdin, modes)) == NULL) {
|
||||||
#else
|
|
||||||
fdout = rb_w32_open_osfhandle((long)hDupOutFile,
|
|
||||||
(_O_WRONLY | pipemode));
|
|
||||||
#endif
|
|
||||||
CloseHandle(hWriteIn);
|
|
||||||
if (fdout == -1) {
|
|
||||||
CloseHandle(hDupOutFile);
|
|
||||||
if (reading) {
|
|
||||||
_close(fdin);
|
_close(fdin);
|
||||||
|
if (writing) {
|
||||||
|
_close(fdout);
|
||||||
|
}
|
||||||
|
CloseChildHandle(child);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
CloseChildHandle(child);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
if (writing) {
|
||||||
|
sprintf(modes, "w%s", pipemode == O_BINARY ? "b" : "");
|
||||||
if (reading) {
|
if ((*fpw = (FILE *)fdopen(fdout, modes)) == NULL) {
|
||||||
sprintf(modes, "r%s", pipemode == O_BINARY ? "b" : "");
|
|
||||||
if ((*fpr = (FILE *)fdopen(fdin, modes)) == NULL) {
|
|
||||||
_close(fdin);
|
|
||||||
if (writing) {
|
|
||||||
_close(fdout);
|
_close(fdout);
|
||||||
|
if (reading) {
|
||||||
|
fclose(*fpr);
|
||||||
|
}
|
||||||
|
CloseChildHandle(child);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
CloseChildHandle(child);
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
ret = child->pid;
|
||||||
if (writing) {
|
} while (0));
|
||||||
sprintf(modes, "w%s", pipemode == O_BINARY ? "b" : "");
|
|
||||||
if ((*fpw = (FILE *)fdopen(fdout, modes)) == NULL) {
|
|
||||||
_close(fdout);
|
|
||||||
if (reading) {
|
|
||||||
fclose(*fpr);
|
|
||||||
}
|
|
||||||
CloseChildHandle(child);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return child->pid;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern VALUE rb_last_status;
|
extern VALUE rb_last_status;
|
||||||
@ -1409,13 +1391,6 @@ EXTERN_C _CRTIMP ioinfo * __pioinfo[];
|
|||||||
#define _set_osfhnd(fh, osfh) (void)(_osfhnd(fh) = osfh)
|
#define _set_osfhnd(fh, osfh) (void)(_osfhnd(fh) = osfh)
|
||||||
#define _set_osflags(fh, flags) (_osfile(fh) = (flags))
|
#define _set_osflags(fh, flags) (_osfile(fh) = (flags))
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#define _set_osfhnd(fh, osfh) (void)((fh), (osfh))
|
|
||||||
#define _set_osflags(fh, flags) (void)((fh), (flags))
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define FOPEN 0x01 /* file handle open */
|
#define FOPEN 0x01 /* file handle open */
|
||||||
#define FNOINHERIT 0x10 /* file handle opened O_NOINHERIT */
|
#define FNOINHERIT 0x10 /* file handle opened O_NOINHERIT */
|
||||||
#define FAPPEND 0x20 /* file handle opened O_APPEND */
|
#define FAPPEND 0x20 /* file handle opened O_APPEND */
|
||||||
@ -1427,6 +1402,7 @@ rb_w32_open_osfhandle(long osfhandle, int flags)
|
|||||||
{
|
{
|
||||||
int fh;
|
int fh;
|
||||||
char fileflags; /* _osfile flags */
|
char fileflags; /* _osfile flags */
|
||||||
|
HANDLE hF;
|
||||||
|
|
||||||
/* copy relevant flags from second parameter */
|
/* copy relevant flags from second parameter */
|
||||||
fileflags = FDEV;
|
fileflags = FDEV;
|
||||||
@ -1440,29 +1416,33 @@ rb_w32_open_osfhandle(long osfhandle, int flags)
|
|||||||
if (flags & O_NOINHERIT)
|
if (flags & O_NOINHERIT)
|
||||||
fileflags |= FNOINHERIT;
|
fileflags |= FNOINHERIT;
|
||||||
|
|
||||||
RUBY_CRITICAL({
|
/* attempt to allocate a C Runtime file handle */
|
||||||
/* attempt to allocate a C Runtime file handle */
|
hF = CreateFile("NUL", 0, 0, NULL, OPEN_ALWAYS, 0, NULL);
|
||||||
HANDLE hF = CreateFile("NUL", 0, 0, NULL, OPEN_ALWAYS, 0, NULL);
|
fh = _open_osfhandle((long)hF, 0);
|
||||||
fh = _open_osfhandle((long)hF, 0);
|
CloseHandle(hF);
|
||||||
CloseHandle(hF);
|
if (fh == -1) {
|
||||||
if (fh == -1) {
|
errno = EMFILE; /* too many open files */
|
||||||
errno = EMFILE; /* too many open files */
|
_doserrno = 0L; /* not an OS error */
|
||||||
_doserrno = 0L; /* not an OS error */
|
}
|
||||||
}
|
else {
|
||||||
else {
|
|
||||||
|
|
||||||
MTHREAD_ONLY(EnterCriticalSection(&(_pioinfo(fh)->lock)));
|
MTHREAD_ONLY(EnterCriticalSection(&(_pioinfo(fh)->lock)));
|
||||||
/* the file is open. now, set the info in _osfhnd array */
|
/* the file is open. now, set the info in _osfhnd array */
|
||||||
_set_osfhnd(fh, osfhandle);
|
_set_osfhnd(fh, osfhandle);
|
||||||
|
|
||||||
fileflags |= FOPEN; /* mark as open */
|
fileflags |= FOPEN; /* mark as open */
|
||||||
|
|
||||||
_set_osflags(fh, fileflags); /* set osfile entry */
|
_set_osflags(fh, fileflags); /* set osfile entry */
|
||||||
MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fh)->lock));
|
MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fh)->lock));
|
||||||
}
|
}
|
||||||
});
|
|
||||||
return fh; /* return handle */
|
return fh; /* return handle */
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define _set_osfhnd(fh, osfh) (void)((fh), (osfh))
|
||||||
|
#define _set_osflags(fh, flags) (void)((fh), (flags))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef getsockopt
|
#undef getsockopt
|
||||||
|
|
||||||
@ -1500,7 +1480,8 @@ rb_w32_fddup (int fd)
|
|||||||
if (s == -1)
|
if (s == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return rb_w32_open_osfhandle(s, O_RDWR|O_BINARY);
|
RUBY_CRITICAL(fd = rb_w32_open_osfhandle(s, O_RDWR|O_BINARY));
|
||||||
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1810,8 +1791,8 @@ StartSockets ()
|
|||||||
|
|
||||||
#undef accept
|
#undef accept
|
||||||
|
|
||||||
SOCKET
|
int
|
||||||
rb_w32_accept (SOCKET s, struct sockaddr *addr, int *addrlen)
|
rb_w32_accept(int s, struct sockaddr *addr, int *addrlen)
|
||||||
{
|
{
|
||||||
SOCKET r;
|
SOCKET r;
|
||||||
|
|
||||||
@ -1820,16 +1801,21 @@ rb_w32_accept (SOCKET s, struct sockaddr *addr, int *addrlen)
|
|||||||
}
|
}
|
||||||
RUBY_CRITICAL({
|
RUBY_CRITICAL({
|
||||||
r = accept(TO_SOCKET(s), addr, addrlen);
|
r = accept(TO_SOCKET(s), addr, addrlen);
|
||||||
if (r == INVALID_SOCKET)
|
if (r == INVALID_SOCKET) {
|
||||||
errno = WSAGetLastError();
|
errno = WSAGetLastError();
|
||||||
|
s = -1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
s = rb_w32_open_osfhandle(r, O_RDWR|O_BINARY);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return rb_w32_open_osfhandle(r, O_RDWR|O_BINARY);
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef bind
|
#undef bind
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_bind (SOCKET s, struct sockaddr *addr, int addrlen)
|
rb_w32_bind(int s, struct sockaddr *addr, int addrlen)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -1847,7 +1833,7 @@ rb_w32_bind (SOCKET s, struct sockaddr *addr, int addrlen)
|
|||||||
#undef connect
|
#undef connect
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_connect (SOCKET s, struct sockaddr *addr, int addrlen)
|
rb_w32_connect(int s, struct sockaddr *addr, int addrlen)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -1865,7 +1851,7 @@ rb_w32_connect (SOCKET s, struct sockaddr *addr, int addrlen)
|
|||||||
#undef getpeername
|
#undef getpeername
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_getpeername (SOCKET s, struct sockaddr *addr, int *addrlen)
|
rb_w32_getpeername(int s, struct sockaddr *addr, int *addrlen)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -1882,7 +1868,7 @@ rb_w32_getpeername (SOCKET s, struct sockaddr *addr, int *addrlen)
|
|||||||
#undef getsockname
|
#undef getsockname
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_getsockname (SOCKET s, struct sockaddr *addr, int *addrlen)
|
rb_w32_getsockname(int s, struct sockaddr *addr, int *addrlen)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -1897,7 +1883,7 @@ rb_w32_getsockname (SOCKET s, struct sockaddr *addr, int *addrlen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_getsockopt (SOCKET s, int level, int optname, char *optval, int *optlen)
|
rb_w32_getsockopt(int s, int level, int optname, char *optval, int *optlen)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -1914,7 +1900,7 @@ rb_w32_getsockopt (SOCKET s, int level, int optname, char *optval, int *optlen)
|
|||||||
#undef ioctlsocket
|
#undef ioctlsocket
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_ioctlsocket (SOCKET s, long cmd, u_long *argp)
|
rb_w32_ioctlsocket(int s, long cmd, u_long *argp)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -1931,7 +1917,7 @@ rb_w32_ioctlsocket (SOCKET s, long cmd, u_long *argp)
|
|||||||
#undef listen
|
#undef listen
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_listen (SOCKET s, int backlog)
|
rb_w32_listen(int s, int backlog)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -1948,7 +1934,7 @@ rb_w32_listen (SOCKET s, int backlog)
|
|||||||
#undef recv
|
#undef recv
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_recv (SOCKET s, char *buf, int len, int flags)
|
rb_w32_recv(int s, char *buf, int len, int flags)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -1965,7 +1951,7 @@ rb_w32_recv (SOCKET s, char *buf, int len, int flags)
|
|||||||
#undef recvfrom
|
#undef recvfrom
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_recvfrom (SOCKET s, char *buf, int len, int flags,
|
rb_w32_recvfrom(int s, char *buf, int len, int flags,
|
||||||
struct sockaddr *from, int *fromlen)
|
struct sockaddr *from, int *fromlen)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
@ -1983,7 +1969,7 @@ rb_w32_recvfrom (SOCKET s, char *buf, int len, int flags,
|
|||||||
#undef send
|
#undef send
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_send (SOCKET s, char *buf, int len, int flags)
|
rb_w32_send(int s, char *buf, int len, int flags)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -2000,8 +1986,8 @@ rb_w32_send (SOCKET s, char *buf, int len, int flags)
|
|||||||
#undef sendto
|
#undef sendto
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_sendto (SOCKET s, char *buf, int len, int flags,
|
rb_w32_sendto(int s, char *buf, int len, int flags,
|
||||||
struct sockaddr *to, int tolen)
|
struct sockaddr *to, int tolen)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -2018,7 +2004,7 @@ rb_w32_sendto (SOCKET s, char *buf, int len, int flags,
|
|||||||
#undef setsockopt
|
#undef setsockopt
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_setsockopt (SOCKET s, int level, int optname, char *optval, int optlen)
|
rb_w32_setsockopt(int s, int level, int optname, char *optval, int optlen)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -2035,7 +2021,7 @@ rb_w32_setsockopt (SOCKET s, int level, int optname, char *optval, int optlen)
|
|||||||
#undef shutdown
|
#undef shutdown
|
||||||
|
|
||||||
int
|
int
|
||||||
rb_w32_shutdown (SOCKET s, int how)
|
rb_w32_shutdown(int s, int how)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
@ -2051,23 +2037,26 @@ rb_w32_shutdown (SOCKET s, int how)
|
|||||||
|
|
||||||
#undef socket
|
#undef socket
|
||||||
|
|
||||||
SOCKET
|
int
|
||||||
rb_w32_socket (int af, int type, int protocol)
|
rb_w32_socket(int af, int type, int protocol)
|
||||||
{
|
{
|
||||||
SOCKET s;
|
SOCKET s;
|
||||||
|
int fd;
|
||||||
|
|
||||||
if (!NtSocketsInitialized++) {
|
if (!NtSocketsInitialized++) {
|
||||||
StartSockets();
|
StartSockets();
|
||||||
}
|
}
|
||||||
RUBY_CRITICAL({
|
RUBY_CRITICAL({
|
||||||
s = socket(af, type, protocol);
|
s = socket(af, type, protocol);
|
||||||
if (s == INVALID_SOCKET)
|
if (s == INVALID_SOCKET) {
|
||||||
errno = WSAGetLastError();
|
errno = WSAGetLastError();
|
||||||
|
fd = -1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fd = rb_w32_open_osfhandle(s, O_RDWR|O_BINARY);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
#ifdef __BORLANDC__
|
return fd;
|
||||||
return _open_osfhandle(s, O_RDWR|O_BINARY);
|
|
||||||
#else
|
|
||||||
return rb_w32_open_osfhandle(s, O_RDWR|O_BINARY);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef gethostbyaddr
|
#undef gethostbyaddr
|
||||||
|
@ -163,25 +163,25 @@ extern pid_t pipe_exec(char *, int, FILE **, FILE **);
|
|||||||
extern int flock(int fd, int oper);
|
extern int flock(int fd, int oper);
|
||||||
extern int rb_w32_fddup(int);
|
extern int rb_w32_fddup(int);
|
||||||
extern void rb_w32_fdclose(FILE *);
|
extern void rb_w32_fdclose(FILE *);
|
||||||
extern SOCKET rb_w32_accept(SOCKET, struct sockaddr *, int *);
|
extern int rb_w32_accept(int, struct sockaddr *, int *);
|
||||||
extern int rb_w32_bind(SOCKET, struct sockaddr *, int);
|
extern int rb_w32_bind(int, struct sockaddr *, int);
|
||||||
extern int rb_w32_connect(SOCKET, struct sockaddr *, int);
|
extern int rb_w32_connect(int, struct sockaddr *, int);
|
||||||
extern void rb_w32_fdset(int, fd_set*);
|
extern void rb_w32_fdset(int, fd_set*);
|
||||||
extern void rb_w32_fdclr(int, fd_set*);
|
extern void rb_w32_fdclr(int, fd_set*);
|
||||||
extern int rb_w32_fdisset(int, fd_set*);
|
extern int rb_w32_fdisset(int, fd_set*);
|
||||||
extern long rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
|
extern long rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
|
||||||
extern int rb_w32_getpeername(SOCKET, struct sockaddr *, int *);
|
extern int rb_w32_getpeername(int, struct sockaddr *, int *);
|
||||||
extern int rb_w32_getsockname(SOCKET, struct sockaddr *, int *);
|
extern int rb_w32_getsockname(int, struct sockaddr *, int *);
|
||||||
extern int rb_w32_getsockopt(SOCKET, int, int, char *, int *);
|
extern int rb_w32_getsockopt(int, int, int, char *, int *);
|
||||||
extern int rb_w32_ioctlsocket(SOCKET, long, u_long *);
|
extern int rb_w32_ioctlsocket(int, long, u_long *);
|
||||||
extern int rb_w32_listen(SOCKET, int);
|
extern int rb_w32_listen(int, int);
|
||||||
extern int rb_w32_recv(SOCKET, char *, int, int);
|
extern int rb_w32_recv(int, char *, int, int);
|
||||||
extern int rb_w32_recvfrom(SOCKET, char *, int, int, struct sockaddr *, int *);
|
extern int rb_w32_recvfrom(int, char *, int, int, struct sockaddr *, int *);
|
||||||
extern int rb_w32_send(SOCKET, char *, int, int);
|
extern int rb_w32_send(int, char *, int, int);
|
||||||
extern int rb_w32_sendto(SOCKET, char *, int, int, struct sockaddr *, int);
|
extern int rb_w32_sendto(int, char *, int, int, struct sockaddr *, int);
|
||||||
extern int rb_w32_setsockopt(SOCKET, int, int, char *, int);
|
extern int rb_w32_setsockopt(int, int, int, char *, int);
|
||||||
extern int rb_w32_shutdown(SOCKET, int);
|
extern int rb_w32_shutdown(int, int);
|
||||||
extern SOCKET rb_w32_socket(int, int, int);
|
extern int rb_w32_socket(int, int, int);
|
||||||
extern SOCKET rb_w32_get_osfhandle(int);
|
extern SOCKET rb_w32_get_osfhandle(int);
|
||||||
extern struct hostent * rb_w32_gethostbyaddr(char *, int, int);
|
extern struct hostent * rb_w32_gethostbyaddr(char *, int, int);
|
||||||
extern struct hostent * rb_w32_gethostbyname(char *);
|
extern struct hostent * rb_w32_gethostbyname(char *);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user