1f2895a469
* Fix #323: Missing SelectInterrupt implementation for Windows Using WSAEventSelect, WSAWaitForMultipleEvents and WSAEnumNetworkEvents to emulate poll() with an interrupt-event. * Cleanup * Fixed incomplete comment. * Switched ifdefs to support other Unixes with pipe file descriptors * Fixed: SelectInterrupt fallback code for getFd()==-1 && getEvent()==nullptr converted a PollResultType::Timeout into a ReadyForRead causing the HttpClient to fail because it uses a hard-coded "SelectInterrupt" instance that doesn't implement getFd() and getEvent(). * Fixed gcc compile errors * - HttpClient now uses the SelectInterruptFactory - Fixed wrong ix::poll result when using Windows WSA functions * We must deselect the networkevents from the socket event. Otherwise the socket will report states that aren't there.
36 lines
790 B
C++
36 lines
790 B
C++
/*
|
|
* IXSelectInterrupt.h
|
|
* Author: Benjamin Sergeant
|
|
* Copyright (c) 2019 Machine Zone, Inc. All rights reserved.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <stdint.h>
|
|
#include <string>
|
|
|
|
namespace ix
|
|
{
|
|
class SelectInterrupt
|
|
{
|
|
public:
|
|
SelectInterrupt();
|
|
virtual ~SelectInterrupt();
|
|
|
|
virtual bool init(std::string& errorMsg);
|
|
|
|
virtual bool notify(uint64_t value);
|
|
virtual bool clear();
|
|
virtual uint64_t read();
|
|
virtual int getFd() const;
|
|
virtual void* getEvent() const;
|
|
|
|
// Used as special codes for pipe communication
|
|
static const uint64_t kSendRequest;
|
|
static const uint64_t kCloseRequest;
|
|
};
|
|
|
|
using SelectInterruptPtr = std::unique_ptr<SelectInterrupt>;
|
|
} // namespace ix
|