jak-project/common/cross_sockets/XSocket.h

48 lines
1.4 KiB
C
Raw Normal View History

#pragma once
/*!
* @file XSocket.h
* Cross platform socket library used for the listener.
*/
// clang-format off
#include "common/common_types.h"
#ifdef OS_POSIX
#include <arpa/inet.h>
#include <netinet/in.h>
2020-09-07 19:58:54 -04:00
#include <netinet/tcp.h>
#include <sys/socket.h>
2020-09-07 19:58:54 -04:00
#include <unistd.h>
#elif _WIN32
#define NOMINMAX
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
2020-09-07 19:58:54 -04:00
#include <WinSock2.h>
#endif
// clang-format on
2020-09-07 19:58:54 -04:00
#ifdef __linux
const int TCP_SOCKET_LEVEL = SOL_TCP;
#elif _WIN32
const int TCP_SOCKET_LEVEL = IPPROTO_TCP;
#elif __APPLE__
const int TCP_SOCKET_LEVEL = IPPROTO_TCP;
2020-09-07 19:58:54 -04:00
#endif
int open_socket(int af, int type, int protocol);
int connect_socket(int socket, sockaddr* addr, int nameLen);
#ifdef OS_POSIX
int accept_socket(int socket, sockaddr* addr, socklen_t* addrLen);
int select_and_accept_socket(int socket, sockaddr* addr, socklen_t* addrLen, int microSeconds);
#elif _WIN32
int accept_socket(int socket, sockaddr* addr, int* addrLen);
int select_and_accept_socket(int socket, sockaddr* addr, int* addrLen, int microSeconds);
#endif
2020-09-07 19:58:54 -04:00
void close_socket(int sock);
int set_socket_option(int socket, int level, int optname, const void* optval, int optlen);
int set_socket_timeout(int socket, long microSeconds);
2020-09-07 19:58:54 -04:00
int write_to_socket(int socket, const char* buf, int len);
int read_from_socket(int socket, char* buf, int len);
bool socket_timed_out();
std::string address_to_string(const sockaddr_in& addr);