1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
#ifndef SOCKIO_H_
#define SOCKIO_H_
#include "meta.h"
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <pthread.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netdb.h>
#include <unistd.h>
#include <cstddef>
using namespace std;
#ifndef AI_NUMERICSERV
#define AI_NUMERICSERV 0
#endif
#ifndef AI_ADDRCONFIG
#define AI_ADDRCONFIG 0
#endif
#ifndef MSG_NOSIGNAL
#define MSG_NOSIGNAL 0
#endif
#ifndef MSG_MORE
#define MSG_MORE 0
#endif
#ifndef SO_MAXCONN
#define SO_MAXCONN 250
#endif
namespace acng
{
#ifdef HAVE_SSL
void globalSslInit();
#endif
void termsocket(int);
inline void termsocket_quick(int fd)
{
if(fd<0)
return;
::shutdown(fd, SHUT_RDWR);
while(0 != ::close(fd))
{
if(errno != EINTR) break;
};
fd=-1;
}
inline bool check_read_state(int fd)
{
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
struct timeval tv = { 0, 0};
return (1 == select(fd + 1, &rfds, nullptr, nullptr, &tv) && FD_ISSET(fd, &rfds));
}
}
#endif /*SOCKIO_H_*/
|