23 #ifndef SOCKETENGINE_H
24 #define SOCKETENGINE_H
29 #include "inspircd_config.h"
57 FD_WANT_NO_READ = 0x1,
60 FD_WANT_POLL_READ = 0x2,
67 FD_WANT_FAST_READ = 0x4,
74 FD_WANT_EDGE_READ = 0x8,
77 FD_WANT_READ_MASK = 0x0F,
81 FD_WANT_NO_WRITE = 0x10,
89 FD_WANT_POLL_WRITE = 0x20,
103 FD_WANT_FAST_WRITE = 0x40,
109 FD_WANT_EDGE_WRITE = 0x80,
113 FD_WANT_SINGLE_WRITE = 0x100,
116 FD_WANT_WRITE_MASK = 0x1F0,
122 FD_ADD_TRIAL_READ = 0x1000,
126 FD_READ_WILL_BLOCK = 0x2000,
136 FD_ADD_TRIAL_WRITE = 0x4000,
140 FD_WRITE_WILL_BLOCK = 0x8000,
143 FD_TRIAL_NOTE_MASK = 0x5000
181 inline int GetFd()
const {
return fd; }
183 inline int GetEventMask()
const {
return event_mask; }
251 void UpdateStats(
size_t len_in,
size_t len_out);
253 virtual void OnSetEvent(
EventHandler* eh,
int old_mask,
int new_mask) = 0;
257 unsigned long TotalEvents;
258 unsigned long ReadEvents;
259 unsigned long WriteEvents;
260 unsigned long ErrorEvents;
303 inline int GetMaxFds()
const {
return MAX_DESCRIPTORS; }
325 virtual bool HasFd(
int fd);
347 virtual void DispatchTrialWrites();
367 int Accept(
EventHandler* fd, sockaddr *addr, socklen_t *addrlen);
391 int Send(
EventHandler* fd,
const void *buf,
size_t len,
int flags);
401 int Recv(
EventHandler* fd,
void *buf,
size_t len,
int flags);
413 int RecvFrom(
EventHandler* fd,
void *buf,
size_t len,
int flags, sockaddr *from, socklen_t *fromlen);
425 int SendTo(
EventHandler* fd,
const void *buf,
size_t len,
int flags,
const sockaddr *to, socklen_t tolen);
434 int Connect(
EventHandler* fd,
const sockaddr *serv_addr, socklen_t addrlen);
440 int Blocking(
int fd);
446 int NonBlocking(
int fd);
460 int Shutdown(
int fd,
int how);
472 int Listen(
int sockfd,
int backlog);
476 void SetReuse(
int sockfd);
487 virtual void RecoverFromFork();
491 void GetStats(
float &kbitpersec_in,
float &kbitpersec_out,
float &kbitpersec_total);
496 static bool IgnoreError();
500 static std::string LastError();
504 static std::string GetError(
int errnum);
509 if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
513 if (WSAGetLastError() == WSAEWOULDBLOCK)