7# define WIN32_LEAN_AND_MEAN
15# include <sys/socket.h>
16# include <sys/select.h>
20#pragma comment(lib, "WS2_32.lib")
33# define SIG_SAFE_CALL(expr) return expr
35# define SOCKBUF_T char *
37# define SIG_SAFE_CALL(expr) \
41 if ( rc != -1 || errno != EINTR ) \
45# define SOCKLEN_T socklen_t
46# define SOCKBUF_T void *
50inline ssize_t qsendto(
int socket,
const SOCKBUF_T buf,
size_t size,
int flags,
const struct sockaddr *dest_addr, SOCKLEN_T addrlen)
52 SIG_SAFE_CALL(
::sendto(socket, buf,
int(
size), flags, dest_addr, addrlen));
56inline ssize_t qrecvfrom(
int socket, SOCKBUF_T buf,
size_t size,
int flags,
struct sockaddr *src_addr, SOCKLEN_T *addrlen)
58 SIG_SAFE_CALL(
::recvfrom(socket, buf,
int(
size), flags, src_addr, addrlen));
65 return qsendto(socket, (SOCKBUF_T)buf,
size, 0,
nullptr, 0);
75 return qrecvfrom(socket, (SOCKBUF_T)buf,
size, 0,
nullptr,
nullptr);
82inline int qselect(
int nflds, fd_set *rds, fd_set *wds, fd_set *eds,
struct timeval *timeout)
84 SIG_SAFE_CALL(
::select(nflds, rds, wds, eds, timeout));
87#if defined(__NT__) && _WIN32_WINNT < 0x0600
90# define POLLOUT 0x0010
91# define POLLERR 0x0001
105 return WSAPoll(fds, nfds, timeout_ms);
107 SIG_SAFE_CALL(::poll(fds, nfds, timeout_ms));
116 inline ssize_t sendto(
int,
const SOCKBUF_T,
size_t,
int,
const struct sockaddr *, SOCKLEN_T) {
return 0; }
117 inline ssize_t recvfrom(
int, SOCKBUF_T,
size_t,
int,
struct sockaddr *, SOCKLEN_T *) {
return 0; }
118 inline ssize_t send(
int,
const SOCKBUF_T,
size_t,
int) {
return 0; }
120 inline int select(
int, fd_set *, fd_set *, fd_set *,
struct timeval *) {
return 0; }
asize_t size
Definition kernwin.hpp:6701
ssize_t recv(int, SOCKBUF_T, size_t, int)
Definition pronet.h:119
ssize_t send(int, const SOCKBUF_T, size_t, int)
Definition pronet.h:118
ssize_t sendto(int, const SOCKBUF_T, size_t, int, const struct sockaddr *, SOCKLEN_T)
Definition pronet.h:116
int select(int, fd_set *, fd_set *, fd_set *, struct timeval *)
Definition pronet.h:120
ssize_t recvfrom(int, SOCKBUF_T, size_t, int, struct sockaddr *, SOCKLEN_T *)
Definition pronet.h:117
unsigned int uint32
unsigned 32 bit value
Definition pro.h:352
ptrdiff_t ssize_t
Signed size_t - used to check for size overflows when the counter becomes negative.
Definition pro.h:385
unsigned short ushort
unsigned 16 bit value
Definition pro.h:342
_qstring< char > qstring
regular string
Definition pro.h:3771
ssize_t qsendto(int socket, const SOCKBUF_T buf, size_t size, int flags, const struct sockaddr *dest_addr, SOCKLEN_T addrlen)
Definition pronet.h:50
ssize_t qsend(int socket, const void *buf, size_t size)
Definition pronet.h:62
idaman bool ida_export qgethostname(qstring *out)
idaman bool ida_export qhost2addr_(void *out, const char *name, ushort family, ushort port=0)
Get the IPv4 or IPv6 address corresponding to the given host.
ssize_t qrecv(int socket, void *buf, size_t size)
Definition pronet.h:72
ssize_t qrecvfrom(int socket, SOCKBUF_T buf, size_t size, int flags, struct sockaddr *src_addr, SOCKLEN_T *addrlen)
Definition pronet.h:56
int qpoll(pollfd *fds, uint32 nfds, int timeout_ms)
Definition pronet.h:102
__declspec(dllimport) int __stdcall WSAPoll(pollfd *
int qselect(int nflds, fd_set *rds, fd_set *wds, fd_set *eds, struct timeval *timeout)
Definition pronet.h:82
bool get_my_ip(char out[NI_MAXHOST], const ushort family=AF_INET)
bool qhost2addr(struct sockaddr_in *out, const char *name, ushort port=0)
Definition pronet.h:140
SHORT revents
Definition pronet.h:96
SOCKET fd
Definition pronet.h:94
SHORT events
Definition pronet.h:95