WvStreams
|
00001 #ifndef __WIN32_STREAMS_H 00002 #define __WIN32_STREAMS_H 00003 00004 #include <winsock2.h> 00005 00006 extern "C" { 00007 int close(int fd); 00008 int read(int fd, void *buf, size_t count); 00009 int write(int fd, const void *buf, size_t count); 00010 00011 unsigned int sleep(unsigned int seconds); // does this belong here? 00012 } 00013 00014 #ifndef __GNUC__ 00015 00016 // this little trick allows us to define our own close/read/write 00017 // (in streams.cc) that optionally call _close/_read/_write (defined in <io.h>) 00018 #define __STDC__ 1 // prevents io.h from dllimporting close/read/write 00019 00020 #endif 00021 00022 #include <io.h> 00023 00024 struct socket_fd_pair 00025 { 00026 SOCKET socket; 00027 int fd; 00028 }; 00029 00030 class SocketFromFDMaker 00031 { 00032 protected: 00033 HANDLE m_hThread; 00034 socket_fd_pair m_pair; 00035 SOCKET m_socket; 00036 bool m_wait; 00037 public: 00038 SocketFromFDMaker(int fd, LPTHREAD_START_ROUTINE lpt, 00039 bool wait_for_termination = false); 00040 ~SocketFromFDMaker(); 00041 SOCKET GetSocket() { return m_socket; } 00042 }; 00043 00044 DWORD WINAPI fd2socket_fwd(LPVOID lpThreadParameter); 00045 DWORD WINAPI socket2fd_fwd(LPVOID lpThreadParameter); 00046 00047 #endif // __WIN32_STREAMS_H