1 /* 2 * fcgios.h -- 3 * 4 * Bill Snapper 5 * snapper@openmarket.com 6 * 7 * Copyright (c) 1996 Open Market, Inc. 8 * 9 * See the file "LICENSE" for information on usage and redistribution 10 * of this file, and for a DISCLAIMER OF ALL WARRANTIES. 11 */ 12 #ifndef _FCGIOS_H 13 #define _FCGIOS_H 14 15 #ifdef _WIN32 16 #define WIN32_LEAN_AND_MEAN 17 #include <windows.h> 18 #include <winsock2.h> 19 #endif 20 21 #include "fcgi_config.h" 22 23 #ifdef HAVE_SYS_TIME_H 24 #include <sys/time.h> 25 #endif 26 27 #ifdef HAVE_SYS_TYPES_H 28 #include <sys/types.h> 29 #endif 30 31 #if defined (c_plusplus) || defined (__cplusplus) 32 extern "C" { 33 #endif 34 35 #ifdef _WIN32 36 #define OS_Errno GetLastError() 37 #define OS_SetErrno(err) SetLastError(err) 38 #ifndef O_NONBLOCK 39 #define O_NONBLOCK 0x0004 /* no delay */ 40 #endif 41 #else /* !_WIN32 */ 42 #define OS_Errno errno 43 #define OS_SetErrno(err) errno = (err) 44 #endif /* !_WIN32 */ 45 46 #ifndef DLLAPI 47 #ifdef _WIN32 48 #define DLLAPI __declspec(dllimport) 49 #else 50 #define DLLAPI 51 #endif 52 #endif 53 54 55 /* This is the initializer for a "struct timeval" used in a select() call 56 * right after a new request is accept()ed to determine readablity. Its 57 * a drop-dead timer. Its only used for AF_UNIX sockets (not TCP sockets). 58 * Its a workaround for a kernel bug in Linux 2.0.x and SCO Unixware. 59 * Making this as small as possible, yet remain reliable would be best. 60 * 2 seconds is very conservative. 0,0 is not reliable. The shorter the 61 * timeout, the faster request processing will recover. The longer the 62 * timeout, the more likely this application being "busy" will cause other 63 * requests to abort and cause more dead sockets that need this timeout. */ 64 #define READABLE_UNIX_FD_DROP_DEAD_TIMEVAL 2,0 65 66 #ifndef STDIN_FILENO 67 #define STDIN_FILENO 0 68 #endif 69 70 #ifndef STDOUT_FILENO 71 #define STDOUT_FILENO 1 72 #endif 73 74 #ifndef STDERR_FILENO 75 #define STDERR_FILENO 2 76 #endif 77 78 #ifndef MAXPATHLEN 79 #define MAXPATHLEN 1024 80 #endif 81 82 #ifndef X_OK 83 #define X_OK 0x01 84 #endif 85 86 #ifndef _CLIENTDATA 87 # if defined(__STDC__) || defined(__cplusplus) 88 typedef void *ClientData; 89 # else 90 typedef int *ClientData; 91 # endif /* __STDC__ */ 92 #define _CLIENTDATA 93 #endif 94 95 typedef void (*OS_AsyncProc) (ClientData clientData, int len); 96 97 DLLAPI int OS_LibInit(int stdioFds[3]); 98 DLLAPI void OS_LibShutdown(void); 99 DLLAPI int OS_CreateLocalIpcFd(const char *bindPath, int backlog); 100 DLLAPI int OS_FcgiConnect(char *bindPath); 101 DLLAPI int OS_Read(int fd, char * buf, size_t len); 102 DLLAPI int OS_Write(int fd, char * buf, size_t len); 103 DLLAPI int OS_SpawnChild(char *execPath, int listenFd); 104 DLLAPI int OS_AsyncReadStdin(void *buf, int len, OS_AsyncProc procPtr, 105 ClientData clientData); 106 DLLAPI int OS_AsyncRead(int fd, int offset, void *buf, int len, 107 OS_AsyncProc procPtr, ClientData clientData); 108 DLLAPI int OS_AsyncWrite(int fd, int offset, void *buf, int len, 109 OS_AsyncProc procPtr, ClientData clientData); 110 DLLAPI int OS_Close(int fd, int shutdown); 111 DLLAPI int OS_CloseRead(int fd); 112 DLLAPI int OS_DoIo(struct timeval *tmo); 113 DLLAPI int OS_Accept(int listen_sock, int fail_on_intr, const char *webServerAddrs); 114 DLLAPI int OS_IpcClose(int ipcFd, int shutdown); 115 DLLAPI int OS_IsFcgi(int sock); 116 DLLAPI void OS_SetFlags(int fd, int flags); 117 118 DLLAPI void OS_ShutdownPending(void); 119 120 #if defined (__cplusplus) || defined (c_plusplus) 121 } /* terminate extern "C" { */ 122 #endif 123 124 #endif /* _FCGIOS_H */ 125