Code refactoring

This commit is contained in:
Cloaked9000
2016-12-15 14:57:01 +00:00
parent 14fccb84c9
commit 69d183ed18
12 changed files with 294 additions and 204 deletions
+17
View File
@@ -6,6 +6,7 @@
#define FRNETLIB_NETWORKENCODING_H
#include <netinet/in.h>
#include <fcntl.h>
#include <cstring>
#define htonll(x) ((1==htonl(1)) ? (x) : ((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32))
@@ -53,6 +54,22 @@ inline void *get_sin_addr(struct sockaddr *sa)
return &(((sockaddr_in6*)sa)->sin6_addr);
}
inline void set_unix_socket_blocking(int32_t socket_descriptor, bool is_blocking_already, bool should_block)
{
//Don't update it if we're already in that mode
if(should_block == is_blocking_already)
return;
//Different API calls needed for both windows and unix
#ifdef WIN32
u_long non_blocking = should_block ? 0 : 1;
ioctlsocket(socket_descriptor, FIONBIO, &non_blocking);
#else
int flags = fcntl(socket_descriptor, F_GETFL, 0);
fcntl(socket_descriptor, F_SETFL, is_blocking_already ? flags ^ O_NONBLOCK : flags ^= O_NONBLOCK);
#endif
}
//Windows and UNIX require some different headers.
//We also need some compatibility defines for cross platform support.