IXWebSocket/ixwebsocket/IXSocket.h

59 lines
1.3 KiB
C
Raw Normal View History

2018-09-27 23:56:48 +02:00
/*
* IXSocket.h
* Author: Benjamin Sergeant
* Copyright (c) 2017-2018 Machine Zone, Inc. All rights reserved.
*/
#pragma once
#include <string>
#include <functional>
#include <mutex>
2018-10-01 23:46:11 +02:00
#include <atomic>
2018-09-27 23:56:48 +02:00
#include "IXEventFd.h"
2018-12-15 01:28:11 +01:00
#include "IXCancellationRequest.h"
2018-10-09 06:42:45 +02:00
struct addrinfo;
2018-09-27 23:56:48 +02:00
namespace ix
{
class Socket {
public:
using OnPollCallback = std::function<void()>;
Socket();
virtual ~Socket();
void configure();
virtual void poll(const OnPollCallback& onPollCallback);
virtual void wakeUpFromPoll();
// Virtual methods
virtual bool connect(const std::string& url,
int port,
std::string& errMsg,
2018-12-15 01:28:11 +01:00
const CancellationRequest& isCancellationRequested);
2018-09-27 23:56:48 +02:00
virtual void close();
virtual int send(char* buffer, size_t length);
virtual int send(const std::string& buffer);
virtual int recv(void* buffer, size_t length);
2018-10-09 06:42:45 +02:00
int getErrno() const;
static bool init(); // Required on Windows to initialize WinSocket
static void cleanup(); // Required on Windows to cleanup WinSocket
2018-09-27 23:56:48 +02:00
protected:
2018-10-09 06:42:45 +02:00
void closeSocket(int fd);
2018-09-27 23:56:48 +02:00
std::atomic<int> _sockfd;
std::mutex _socketMutex;
EventFd _eventfd;
2018-10-09 06:42:45 +02:00
private:
2018-09-27 23:56:48 +02:00
};
}