00001 #line 2687 "./lpsrc/flx_demux.pak"
00002 #ifndef __DEMUX_OVERLAPPED__
00003 #define __DEMUX_OVERLAPPED__
00004 #include "flx_demux_config.hpp"
00005
00006
00007 #include <WinSock2.h>
00008 #include "demux_iocp_demuxer.hpp"
00009 #include <MSWSock.h>
00010
00011 namespace flx { namespace demux {
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 class DEMUX_EXTERN acceptex_control_block : public iocp_wakeup {
00025 enum { ACCEPTEX_ADDR_SIZE = sizeof(SOCKADDR_IN) + 16 };
00026
00027 public:
00028 SOCKET listener, acceptor;
00029
00030 char accept_buf[2*ACCEPTEX_ADDR_SIZE];
00031
00032 virtual bool start_overlapped();
00033
00034 acceptex_control_block()
00035 : listener(INVALID_SOCKET), acceptor(INVALID_SOCKET) {}
00036 };
00037
00038 class DEMUX_EXTERN connectex_control_block : public iocp_wakeup
00039 {
00040 public:
00041
00042 int socket_err;
00043
00044
00045 SOCKET s;
00046 const char* addy;
00047 int p;
00048
00049
00050 connectex_control_block() : s(INVALID_SOCKET), addy(0), p(0) {}
00051
00052
00053
00054 bool finished() { return ERROR_IO_PENDING != socket_err; }
00055
00056 virtual bool start_overlapped();
00057 };
00058
00059
00060 class DEMUX_EXTERN transmitfile_control_block : public iocp_wakeup {
00061 SOCKET s;
00062 HANDLE file;
00063 DWORD flags;
00064 public:
00065
00066 transmitfile_control_block(SOCKET dst)
00067 : s(dst), file(NULL), flags(TF_DISCONNECT | TF_REUSE_SOCKET) {}
00068
00069 transmitfile_control_block(SOCKET dst, HANDLE src)
00070 : s(dst), file(src), flags(0) {}
00071
00072 virtual bool start_overlapped();
00073 };
00074
00075
00076
00077 class DEMUX_EXTERN wsasocketio_control_block : public iocp_wakeup {
00078 protected:
00079 enum { NUM_WBUFS = 1 };
00080 WSABUF wbufs[NUM_WBUFS];
00081 public:
00082 SOCKET s;
00083 sel_param* ppb;
00084 int error;
00085 bool reading;
00086
00087
00088 wsasocketio_control_block(SOCKET src, sel_param* pb, bool read);
00089
00090 virtual bool start_overlapped();
00091
00092 virtual void iocp_op_finished( DWORD nbytes, ULONG_PTR udat,
00093 LPOVERLAPPED olp, int err);
00094 };
00095
00096
00097 class DEMUX_EXTERN winfileio_control_block : public iocp_wakeup {
00098 bool reading;
00099 public:
00100
00101 sel_param pb;
00102 HANDLE file;
00103
00104
00105 winfileio_control_block(HANDLE f, void* buf, int len, bool read);
00106
00107 virtual bool start_overlapped();
00108
00109
00110 };
00111
00112 }}
00113
00114 #endif