Linux也被当作一个文件,一个网络套接字。但是,Windows 不是。 普通文件和网络套接字被视为“FD”。 如果代码不应该依赖操作系统,应该怎么写?
我觉得像下面..
#ifndef INVALID_SOCKET
#define INVALID_SOCKET (-1)
#endif
class Descriptor {
private:
int m_fd;
public:
Descriptor() : m_fd(INVALID_SOCKET) { }
virtual ~Descriptor() { this->close(); }
virtual bool isValid();
virtual bool close() = 0;
virtual int getNo() { return m_fd; }
};
enum EListenFlags {
E_LISTEN_READ = 1,
E_LISTEN_WRITE = 2,
E_LISTEN_ERROR = 4,
E_LISTEN_NONBLOCK = 8
};
class AsyncDescriptor : public Descriptor {
// like EPoll (for linux) or IOCP (for Windows) or SELECT, POLL...
public:
virtual bool listen(Descriptor* pDesc, int listenFlags) = 0;
virtual bool dizzy(Descriptor* pDesc, int dizzyFlags) = 0;
virtual bool wait(std::list<Descriptor*>& listOut) = 0;
virtual bool list(std::list<Descriptor*>& listOut) = 0;
virtual bool getFlags(Descriptor* pDesc, int* flagOutput) = 0;
};
class SocketDescriptor : public Descriptor {
// Omitted.......
};
// Details are omitted below ...
我该如何实现???! :(
最佳答案
为什么不使用 Asio?它不做你想做的事吗?
关于c++ - C/C++ 的非操作系统特定 FD(文件描述符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30569260/