mirror of
https://github.com/reactos/reactos.git
synced 2024-08-20 18:35:32 +00:00
244 lines
6.1 KiB
C
244 lines
6.1 KiB
C
/* sio.h */
|
|
|
|
#ifndef _sio_h_
|
|
#define _sio_h_ 1
|
|
|
|
typedef struct SelectSet {
|
|
fd_set fds;
|
|
struct timeval timeout;
|
|
int maxfd;
|
|
int numfds;
|
|
} SelectSet, *SelectSetPtr;
|
|
|
|
/* For SReadline */
|
|
#ifndef _SReadlineInfo_
|
|
#define _SReadlineInfo_ 1
|
|
typedef struct SReadlineInfo {
|
|
char *buf; /* Pointer to beginning of buffer. */
|
|
char *bufPtr; /* Pointer to current position in buffer. */
|
|
char *bufLim; /* Pointer to end of buffer. */
|
|
size_t bufSize; /* Current size of buffer block. */
|
|
size_t bufSizeMax; /* Maximum size available for buffer. */
|
|
int malloc; /* If non-zero, malloc() was used for buf. */
|
|
int fd; /* File descriptor to use for I/O. */
|
|
int timeoutLen; /* Timeout to use, in seconds. */
|
|
int requireEOLN; /* When buffer is full, continue reading and discarding until \n? */
|
|
} SReadlineInfo;
|
|
#endif
|
|
|
|
#ifndef forever
|
|
# define forever for ( ; ; )
|
|
#endif
|
|
|
|
/* Private decl; only for use when compiling sio code. */
|
|
#ifdef HAVE_SIGSETJMP
|
|
# define SSetjmp(a) sigsetjmp(a, 1)
|
|
# define SLongjmp(a,b) siglongjmp(a, b)
|
|
# define Sjmp_buf sigjmp_buf
|
|
#else
|
|
# define SSetjmp(a) setjmp(a)
|
|
# define SLongjmp(a,b) longjmp(a, b)
|
|
# define Sjmp_buf jmp_buf
|
|
#endif
|
|
|
|
/* Parameter to SBind */
|
|
#define kReUseAddrYes 1
|
|
#define kReUseAddrNo 0
|
|
|
|
/* Parameter to SRead/SWrite */
|
|
#define kFullBufferNotRequired 00000
|
|
#define kFullBufferRequired 00001
|
|
#define kFullBufferRequiredExceptLast 00002
|
|
#define kNoFirstSelect 00010
|
|
|
|
/* Parameter to AddrToAddrStr */
|
|
#define kUseDNSYes 1
|
|
#define kUseDNSNo 0
|
|
|
|
#define kTimeoutErr (-2)
|
|
#define kBrokenPipeErr (-3)
|
|
|
|
#define kAddrStrToAddrMiscErr (-4)
|
|
#define kAddrStrToAddrBadHost (-5)
|
|
|
|
#define kSNewFailed (-6)
|
|
#define kSBindFailed (-7)
|
|
#define kSListenFailed (-8)
|
|
|
|
#define kSrlBufSize 2048
|
|
|
|
#define kNoTimeLimit 0
|
|
|
|
#if 1 /* %config2% -- set by configure script -- do not modify */
|
|
# ifndef NO_SIGNALS
|
|
# define NO_SIGNALS 1
|
|
# endif
|
|
#else
|
|
/* #undef NO_SIGNALS */
|
|
#endif
|
|
|
|
/* Don't change the following line -- it is modified by the Configure script. */
|
|
#define SAccept SAcceptS
|
|
|
|
#ifndef SAccept
|
|
# if defined(NO_SIGNALS) || defined(WIN32) || defined(_WINDOWS)
|
|
# define SAccept SAcceptS
|
|
# else
|
|
# define SAccept SAcceptA
|
|
# endif
|
|
#endif
|
|
|
|
#if !defined(ETIMEDOUT) && defined(WSAETIMEDOUT)
|
|
# define ETIMEDOUT WSAETIMEDOUT
|
|
#endif
|
|
|
|
#if !defined(EADDRNOTAVAIL) && defined(WSAEADDRNOTAVAIL)
|
|
# define EADDRNOTAVAIL WSAEADDRNOTAVAIL
|
|
#endif
|
|
|
|
#if !defined(EWOULDBLOCK) && defined(WSAEWOULDBLOCK)
|
|
# define EWOULDBLOCK WSAEWOULDBLOCK
|
|
#endif
|
|
|
|
#if !defined(EINPROGRESS) && defined(WSAEINPROGRESS)
|
|
# define EINPROGRESS WSAEINPROGRESS
|
|
#endif
|
|
|
|
#if !defined(WIN32) && !defined(_WINDOWS) && !defined(closesocket)
|
|
# define closesocket close
|
|
#endif
|
|
|
|
#if !defined(WIN32) && !defined(_WINDOWS) && !defined(ioctlsocket)
|
|
# define ioctlsocket ioctl
|
|
#endif
|
|
|
|
#if defined(WIN32) || defined(_WINDOWS)
|
|
# define SETERRNO errno = WSAGetLastError();
|
|
# define SETWSATIMEOUTERR WSASetLastError(WSAETIMEDOUT);
|
|
#else
|
|
# define SETERRNO
|
|
# define SETWSATIMEOUTERR
|
|
#endif
|
|
|
|
typedef void (*sio_sigproc_t)(int);
|
|
typedef volatile sio_sigproc_t vsio_sigproc_t;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef _sio_main_c
|
|
extern int gLibSio_Uses_Me_To_Quiet_Variable_Unused_Warnings;
|
|
#endif
|
|
|
|
#if (defined(__GNUC__)) && (__GNUC__ >= 2)
|
|
# ifndef UNUSED
|
|
# define UNUSED(a) a __attribute__ ((unused))
|
|
# endif
|
|
# define LIBSIO_USE_VAR(a)
|
|
#else
|
|
# define LIBSIO_USE_VAR(a) gLibSio_Uses_Me_To_Quiet_Variable_Unused_Warnings = (a == 0)
|
|
# ifndef UNUSED
|
|
# define UNUSED(a) a
|
|
# endif
|
|
#endif
|
|
|
|
/* PRead.c */
|
|
int PRead(int, char *const, size_t, int);
|
|
|
|
/* PWrite.c */
|
|
int PWrite(int, const char *const, size_t);
|
|
|
|
/* SAcceptA.c */
|
|
int SAcceptA(int, struct sockaddr_in *const, int);
|
|
|
|
/* SAcceptS.c */
|
|
int SAcceptS(int, struct sockaddr_in *const, int);
|
|
|
|
/* SBind.c */
|
|
int SBind(int, const int, const int, const int);
|
|
int SListen(int, int);
|
|
|
|
/* SClose.c */
|
|
int SClose(int, int);
|
|
|
|
/* SConnect.c */
|
|
int SConnect(int, const struct sockaddr_in *const, int);
|
|
|
|
/* SConnectByName.c */
|
|
int SConnectByName(int, const char *const, const int);
|
|
|
|
/* SNew.c */
|
|
int SNewStreamClient(void);
|
|
int SNewDatagramClient(void);
|
|
int SNewStreamServer(const int, const int, const int, int);
|
|
int SNewDatagramServer(const int, const int, const int);
|
|
|
|
/* SRead.c */
|
|
int SRead(int, char *const, size_t, int, int);
|
|
|
|
/* SReadline.c */
|
|
void FlushSReadlineInfo(SReadlineInfo *);
|
|
int InitSReadlineInfo(SReadlineInfo *, int, char *, size_t, int, int);
|
|
void DisposeSReadlineInfo(SReadlineInfo *);
|
|
int SReadline(SReadlineInfo *, char *const, size_t);
|
|
|
|
/* SRecv.c */
|
|
int SRecv(int, char *const, size_t, int, int, int);
|
|
|
|
/* SRecvfrom.c */
|
|
int SRecvfrom(int, char *const, size_t, int, struct sockaddr_in *const, int);
|
|
|
|
/* SRecvmsg.c */
|
|
int SRecvmsg(int, void *const, int, int);
|
|
|
|
/* SSelect.c */
|
|
void SelectSetInit(SelectSetPtr const, const double);
|
|
void SelectSetAdd(SelectSetPtr const, const int);
|
|
void SelectSetRemove(SelectSetPtr const, const int);
|
|
int SelectW(SelectSetPtr, SelectSetPtr);
|
|
int SelectR(SelectSetPtr, SelectSetPtr);
|
|
|
|
/* SSend.c */
|
|
int SSend(int, char *, size_t, int, int);
|
|
|
|
/* SSendto.c */
|
|
int SSendto(int, const char *const, size_t, int, const struct sockaddr_in *const, int);
|
|
int Sendto(int, const char *const, size_t, const struct sockaddr_in *const);
|
|
|
|
/* SSendtoByName.c */
|
|
int SSendtoByName(int, const char *const, size_t, int, const char *const, int);
|
|
int SendtoByName(int, const char *const, size_t, const char *const);
|
|
|
|
/* SWait.c */
|
|
int SWaitUntilReadyForReading(const int sfd, const int tlen);
|
|
int SWaitUntilReadyForWriting(const int sfd, const int tlen);
|
|
|
|
/* SWrite.c */
|
|
int SWrite(int, const char *const, size_t, int, int);
|
|
|
|
/* SocketUtil.c */
|
|
int GetSocketBufSize(int, size_t *const, size_t *const);
|
|
int SetSocketBufSize(int, size_t, size_t);
|
|
int GetSocketNagleAlgorithm(const int);
|
|
int SetSocketNagleAlgorithm(const int, const int);
|
|
int GetSocketLinger(const int, int *const);
|
|
int SetSocketLinger(const int, const int, const int);
|
|
|
|
/* StrAddr.c */
|
|
int AddrStrToAddr(const char *const, struct sockaddr_in *const, const int);
|
|
char *AddrToAddrStr(char *const dst, size_t dsize, struct sockaddr_in * const saddrp, int dns, const char *fmt);
|
|
|
|
/* SError.c */
|
|
const char *SError(int e);
|
|
|
|
/* main.c */
|
|
void SIOHandler(int);
|
|
void (*SSignal(int signum, void (*handler)(int)))(int);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _sio_h_ */
|