| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
- #ifndef __AFXSOCK_H__
- #define __AFXSOCK_H__
- #ifdef _AFX_NO_SOCKET_SUPPORT
- #error Windows Sockets classes not supported in this library variant.
- #endif
- #ifndef __AFXWIN_H__
- #include <afxwin.h>
- #endif
- #ifndef _WINSOCKAPI_
- #include <winsock.h>
- #endif
- #ifdef _AFX_MINREBUILD
- #pragma component(minrebuild, off)
- #endif
- #ifndef _AFX_FULLTYPEINFO
- #pragma component(mintypeinfo, on)
- #endif
- #ifndef _AFX_NOFORCE_LIBS
- /////////////////////////////////////////////////////////////////////////////
- // Win32 libraries
- #ifdef _AFXDLL
- #if defined(_DEBUG) && !defined(_AFX_MONOLITHIC)
- #ifndef _UNICODE
- #pragma comment(lib, "mfcn42d.lib")
- #else
- #pragma comment(lib, "mfcn42ud.lib")
- #endif
- #endif
- #endif
- #pragma comment(lib, "wsock32.lib")
- #endif //!_AFX_NOFORCE_LIBS
- /////////////////////////////////////////////////////////////////////////////
- #ifdef _AFX_PACKING
- #pragma pack(push, _AFX_PACKING)
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // AFXSOCK - MFC support for Windows Sockets
- // Classes declared in this file
- // CObject
- class CAsyncSocket; // Async Socket implementation and
- // base class for Synchronous Socket
- class CSocket; // Synchronous Socket
- // CFile
- class CSocketFile; // Used with CSocket and CArchive for
- // streaming objects on sockets.
- /////////////////////////////////////////////////////////////////////////////
- // AFXDLL support
- #undef AFX_DATA
- #define AFX_DATA AFX_NET_DATA
- /////////////////////////////////////////////////////////////////////////////
- // CSocketWnd -- internal use only
- // Implementation for sockets notification callbacks.
- // Future versions of MFC may or may not include this exact class.
- class CSocketWnd : public CWnd
- {
- // Construction
- public:
- CSocketWnd();
- protected:
- //{{AFX_MSG(CSocketWnd)
- LRESULT OnSocketNotify(WPARAM wParam, LPARAM lParam);
- LRESULT OnSocketDead(WPARAM wParam, LPARAM lParam);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- /////////////////////////////////////////////////////////////////////////////
- // CAsyncSocket
- class CAsyncSocket : public CObject
- {
- DECLARE_DYNAMIC(CAsyncSocket);
- private:
- CAsyncSocket(const CAsyncSocket& rSrc); // no implementation
- void operator=(const CAsyncSocket& rSrc); // no implementation
- // Construction
- public:
- CAsyncSocket();
- BOOL Create(UINT nSocketPort = 0, int nSocketType=SOCK_STREAM,
- long lEvent = FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
- LPCTSTR lpszSocketAddress = NULL);
- // Attributes
- public:
- SOCKET m_hSocket;
- operator SOCKET() const;
- BOOL Attach(SOCKET hSocket, long lEvent =
- FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
- SOCKET Detach();
- BOOL GetPeerName(CString& rPeerAddress, UINT& rPeerPort);
- BOOL GetPeerName(SOCKADDR* lpSockAddr, int* lpSockAddrLen);
- BOOL GetSockName(CString& rSocketAddress, UINT& rSocketPort);
- BOOL GetSockName(SOCKADDR* lpSockAddr, int* lpSockAddrLen);
- BOOL SetSockOpt(int nOptionName, const void* lpOptionValue,
- int nOptionLen, int nLevel = SOL_SOCKET);
- BOOL GetSockOpt(int nOptionName, void* lpOptionValue,
- int* lpOptionLen, int nLevel = SOL_SOCKET);
- static CAsyncSocket* PASCAL FromHandle(SOCKET hSocket);
- static int PASCAL GetLastError();
- // Operations
- public:
- virtual BOOL Accept(CAsyncSocket& rConnectedSocket,
- SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL);
- BOOL Bind(UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL);
- BOOL Bind (const SOCKADDR* lpSockAddr, int nSockAddrLen);
- virtual void Close();
- BOOL Connect(LPCTSTR lpszHostAddress, UINT nHostPort);
- BOOL Connect(const SOCKADDR* lpSockAddr, int nSockAddrLen);
- BOOL IOCtl(long lCommand, DWORD* lpArgument);
- BOOL Listen(int nConnectionBacklog=5);
- virtual int Receive(void* lpBuf, int nBufLen, int nFlags = 0);
- int ReceiveFrom(void* lpBuf, int nBufLen,
- CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0);
- int ReceiveFrom(void* lpBuf, int nBufLen,
- SOCKADDR* lpSockAddr, int* lpSockAddrLen, int nFlags = 0);
- enum { receives = 0, sends = 1, both = 2 };
- BOOL ShutDown(int nHow = sends);
- virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0);
- int SendTo(const void* lpBuf, int nBufLen,
- UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0);
- int SendTo(const void* lpBuf, int nBufLen,
- const SOCKADDR* lpSockAddr, int nSockAddrLen, int nFlags = 0);
- BOOL AsyncSelect(long lEvent =
- FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
- // Overridable callbacks
- protected:
- virtual void OnReceive(int nErrorCode);
- virtual void OnSend(int nErrorCode);
- virtual void OnOutOfBandData(int nErrorCode);
- virtual void OnAccept(int nErrorCode);
- virtual void OnConnect(int nErrorCode);
- virtual void OnClose(int nErrorCode);
- // Implementation
- public:
- virtual ~CAsyncSocket();
- static CAsyncSocket* PASCAL LookupHandle(SOCKET hSocket, BOOL bDead = FALSE);
- static void PASCAL AttachHandle(SOCKET hSocket, CAsyncSocket* pSocket, BOOL bDead = FALSE);
- static void PASCAL DetachHandle(SOCKET hSocket, BOOL bDead = FALSE);
- static void PASCAL KillSocket(SOCKET hSocket, CAsyncSocket* pSocket);
- static void PASCAL DoCallBack(WPARAM wParam, LPARAM lParam);
- BOOL Socket(int nSocketType=SOCK_STREAM, long lEvent =
- FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE,
- int nProtocolType = 0, int nAddressFormat = PF_INET);
- #ifdef _DEBUG
- virtual void AssertValid() const;
- virtual void Dump(CDumpContext& dc) const;
- #endif
- protected:
- friend class CSocketWnd;
- virtual BOOL ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen);
- virtual int ReceiveFromHelper(void* lpBuf, int nBufLen,
- SOCKADDR* lpSockAddr, int* lpSockAddrLen, int nFlags);
- virtual int SendToHelper(const void* lpBuf, int nBufLen,
- const SOCKADDR* lpSockAddr, int nSockAddrLen, int nFlags);
- };
- /////////////////////////////////////////////////////////////////////////////
- // CSocket
- class CSocket : public CAsyncSocket
- {
- DECLARE_DYNAMIC(CSocket);
- private:
- CSocket(const CSocket& rSrc); // no implementation
- void operator=(const CSocket& rSrc); // no implementation
- // Construction
- public:
- CSocket();
- BOOL Create(UINT nSocketPort = 0, int nSocketType=SOCK_STREAM,
- LPCTSTR lpszSocketAddress = NULL);
- // Attributes
- public:
- BOOL IsBlocking();
- static CSocket* PASCAL FromHandle(SOCKET hSocket);
- BOOL Attach(SOCKET hSocket);
- // Operations
- public:
- void CancelBlockingCall();
- // Overridable callbacks
- protected:
- virtual BOOL OnMessagePending();
- // Implementation
- public:
- int m_nTimeOut;
- virtual ~CSocket();
- static int PASCAL ProcessAuxQueue();
- virtual BOOL Accept(CAsyncSocket& rConnectedSocket,
- SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL);
- virtual void Close();
- virtual int Receive(void* lpBuf, int nBufLen, int nFlags = 0);
- virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0);
- int SendChunk(const void* lpBuf, int nBufLen, int nFlags);
- protected:
- friend class CSocketWnd;
- BOOL* m_pbBlocking;
- int m_nConnectError;
- virtual BOOL ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen);
- virtual int ReceiveFromHelper(void* lpBuf, int nBufLen,
- SOCKADDR* lpSockAddr, int* lpSockAddrLen, int nFlags);
- virtual int SendToHelper(const void* lpBuf, int nBufLen,
- const SOCKADDR* lpSockAddr, int nSockAddrLen, int nFlags);
- static void PASCAL AuxQueueAdd(UINT message, WPARAM wParam, LPARAM lParam);
- virtual BOOL PumpMessages(UINT uStopFlag);
- #ifdef _DEBUG
- virtual void AssertValid() const;
- virtual void Dump(CDumpContext& dc) const;
- #endif
- };
- /////////////////////////////////////////////////////////////////////////////
- // CSocketFile
- class CSocketFile : public CFile
- {
- DECLARE_DYNAMIC(CSocketFile)
- public:
- //Constructors
- CSocketFile(CSocket* pSocket, BOOL bArchiveCompatible = TRUE);
- // Implementation
- public:
- CSocket* m_pSocket;
- BOOL m_bArchiveCompatible;
- virtual ~CSocketFile();
- #ifdef _DEBUG
- virtual void AssertValid() const;
- virtual void Dump(CDumpContext& dc) const;
- #endif
- virtual UINT Read(void* lpBuf, UINT nCount);
- virtual void Write(const void* lpBuf, UINT nCount);
- virtual void Close();
- // Unsupported APIs
- virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
- virtual CFile* Duplicate() const;
- virtual DWORD GetPosition() const;
- virtual LONG Seek(LONG lOff, UINT nFrom);
- virtual void SetLength(DWORD dwNewLen);
- virtual DWORD GetLength() const;
- virtual void LockRange(DWORD dwPos, DWORD dwCount);
- virtual void UnlockRange(DWORD dwPos, DWORD dwCount);
- virtual void Flush();
- virtual void Abort();
- };
- /////////////////////////////////////////////////////////////////////////////
- // Global functions
- BOOL AFXAPI AfxSocketInit(WSADATA* lpwsaData = NULL);
- void AFXAPI AfxSocketTerm();
- /////////////////////////////////////////////////////////////////////////////
- // Inline function declarations
- #ifdef _AFX_PACKING
- #pragma pack(pop)
- #endif
- #ifdef _AFX_ENABLE_INLINES
- #define _AFXSOCK_INLINE AFX_INLINE
- #include <afxsock.inl>
- #undef _AFXSOCK_INLINE
- #endif
- #undef AFX_DATA
- #define AFX_DATA
- #ifdef _AFX_MINREBUILD
- #pragma component(minrebuild, on)
- #endif
- #ifndef _AFX_FULLTYPEINFO
- #pragma component(mintypeinfo, off)
- #endif
- #endif // __AFXSOCK_H__
- /////////////////////////////////////////////////////////////////////////////
|