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