+class CWin32Exception : public std::exception
+{
+public:
+ CWin32Exception();
+ CWin32Exception(const CWin32Exception& other);
+ virtual const char* what() const throw();
+ DWORD GetErrorCode();
+
+private:
+ char szErrorString[500];
+ DWORD dwErrorCode;
+};
+
+// Same value as EXIT_STATUS_FORK (EXIT_STATUS_FORK is unused on Windows)
+#define EXIT_STATUS_SERVICE 4
+
+// POSIX iovec
+struct iovec
+{
+ void* iov_base; // Starting address
+ size_t iov_len; // Number of bytes to transfer
+};
+
+// Windows WSABUF with POSIX field names
+struct WindowsIOVec
+{
+ // POSIX iovec has iov_base then iov_len, WSABUF in Windows has the fields in reverse order
+ u_long iov_len; // Number of bytes to transfer
+ char FAR* iov_base; // Starting address
+};