Select Git revision
-
Henrik (Grubba) Grubbström authored
Rev: src/fdlib.c:1.45
Henrik (Grubba) Grubbström authoredRev: src/fdlib.c:1.45
fdlib.c 27.23 KiB
#include "global.h"
#include "fdlib.h"
#include "error.h"
#include <math.h>
RCSID("$Id: fdlib.c,v 1.45 2000/09/01 16:06:18 grubba Exp $");
#ifdef HAVE_WINSOCK_H
#ifdef _REENTRANT
#include "threads.h"
static MUTEX_T fd_mutex;
#endif
HANDLE da_handle[MAX_OPEN_FILEDESCRIPTORS];
int fd_type[MAX_OPEN_FILEDESCRIPTORS];
int first_free_handle;
#define FD_DEBUG
#ifdef FD_DEBUG
#define FDDEBUG(X) X
#else
#define FDDEBUG(X)
#endif
PMOD_EXPORT char *debug_fd_info(int fd)
{
if(fd<0)
return "BAD";
if(fd > MAX_OPEN_FILEDESCRIPTORS)
return "OUT OF RANGE";
switch(fd_type[fd])
{
case FD_SOCKET: return "IS SOCKET";
case FD_CONSOLE: return "IS CONSOLE";
case FD_FILE: return "IS FILE";
case FD_PIPE: return "IS PIPE";
default: return "NOT OPEN";
}
}
PMOD_EXPORT int debug_fd_query_properties(int fd, int guess)
{
switch(fd_type[fd])
{
case FD_SOCKET:
return fd_BUFFERED | fd_CAN_NONBLOCK | fd_CAN_SHUTDOWN;
case FD_FILE:
case FD_CONSOLE:
return fd_INTERPROCESSABLE;
case FD_PIPE:
return fd_INTERPROCESSABLE | fd_BUFFERED;
default: return 0;
}
}
void fd_init()
{
int e;
WSADATA wsadata;
mt_init(&fd_mutex);
mt_lock(&fd_mutex);
if(WSAStartup(MAKEWORD(1,1), &wsadata) != 0)
{