288 lines
9.3 KiB
C++
288 lines
9.3 KiB
C++
|
|
/*//===============================================================
|
|||
|
|
|
|||
|
|
<< SESSION BASE >>
|
|||
|
|
|
|||
|
|
PRGM : B4nFter
|
|||
|
|
|
|||
|
|
FILE : SESSIONBASE.HPP
|
|||
|
|
DESC : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>⺻ Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD> Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>⺻ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
INIT BUILT DATE : 2007. 09. 09
|
|||
|
|
LAST BUILT DATE : 2007. 09. 12
|
|||
|
|
|
|||
|
|
Copyright<EFBFBD><EFBFBD> 2002~2009 B4nFter (b4nfter@gmail.com) and Co-Writers. All Rights Reserved.
|
|||
|
|
|
|||
|
|
*///===============================================================
|
|||
|
|
|
|||
|
|
|
|||
|
|
#pragma once
|
|||
|
|
|
|||
|
|
|
|||
|
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
// INCLUDE
|
|||
|
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#include "ERRORFORMAT.H"
|
|||
|
|
#include "CRITICALSECTION.HPP"
|
|||
|
|
|
|||
|
|
|
|||
|
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
// DEFINE
|
|||
|
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
class CSessionBase; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
enum EF_NETWORK_BASE_NOFITY { // <20><>Ʈ<EFBFBD><C6AE>ũ <20>̺<EFBFBD>Ʈ <20>뺸 Ÿ<><C5B8>
|
|||
|
|
EV_NBN_ERROR = 0, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (TCP/UDP)
|
|||
|
|
EV_NBN_SESSCNNT, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (TCP)
|
|||
|
|
EV_NBN_SESSDCNT, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (TCP) / <20><>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> (UDP)
|
|||
|
|
EV_NBN_SESSERROR, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (TCP/UDP)
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
typedef VOID (*LPFN_BASE_NOTIFY_PROC) ( // <20><><EFBFBD><EFBFBD> <20>⺻ <20>̺<EFBFBD>Ʈ <20>뺸 <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD>
|
|||
|
|
EF_NETWORK_BASE_NOFITY eNotifyType, // <20><>Ʈ<EFBFBD><C6AE>ũ <20>̺<EFBFBD>Ʈ <20>뺸 Ÿ<><C5B8>
|
|||
|
|
CSessionBase* lpSession, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LPVOID lpResultParam, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20>پ<EFBFBD><D9BE><EFBFBD> <20>뵵<EFBFBD><EBB5B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LPVOID lpBaseNotifyProcParam // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
);
|
|||
|
|
typedef BOOL (*LPFN_RECV_NOTIFY_PROC) ( // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ <20>뺸 <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD>
|
|||
|
|
CSessionBase* lpSession, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CHAR* lpcBuffer, // <20><><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/*in,out*/ INT& iBufferPtr, // <20><><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD>(<28>Է<EFBFBD>)/ó<><C3B3>(<28><><EFBFBD><EFBFBD>) <20><> <20><>ġ (<28>տ<EFBFBD><D5BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>˷<EFBFBD><CBB7>־<EFBFBD><D6BE><EFBFBD> <20><>)
|
|||
|
|
UINT uIoBytes, // <20><><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ŵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
|||
|
|
UINT uTotalBufferSize, // <20><><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ũ<EFBFBD><C5A9>
|
|||
|
|
LPVOID lpRecvNotifyProcParam, // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
IN_ADDR stIpAddress, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP<49>ּ<EFBFBD>
|
|||
|
|
WORD wPortNumber // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE>ȣ (<28><>Ʈ<EFBFBD><C6AE>ũ <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>)
|
|||
|
|
);
|
|||
|
|
typedef VOID (*LPFN_ERROR_NOTIFY_PROC) ( // <20><>Ʈ<EFBFBD><C6AE>ũ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뺸
|
|||
|
|
LPVOID lpModule, // <20><>Ʈ<EFBFBD><C6AE>ũ <20><><EFBFBD>ⰴü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
INT iErrorCode, // <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
|||
|
|
LPCTSTR lpszErrorMessage, // <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD>
|
|||
|
|
LPVOID lpErrorNotifyProcParam // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
|
|||
|
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
// DECLARATION
|
|||
|
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : CLASS
|
|||
|
|
// NAME : CSessionBase
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : Session Base Class
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
class CSessionBase
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
typedef CCriticalSection TP_LOCK;
|
|||
|
|
typedef CLockAuto TP_LOCKAUTO;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
CSessionBase();
|
|||
|
|
virtual ~CSessionBase();
|
|||
|
|
|
|||
|
|
virtual DWORD Open();
|
|||
|
|
virtual VOID Close();
|
|||
|
|
virtual VOID Reset();
|
|||
|
|
|
|||
|
|
SOCKET GetSocket() const { return m_sckThis; }
|
|||
|
|
BOOL IsValid() const { return(INVALID_SOCKET != m_sckThis); }
|
|||
|
|
|
|||
|
|
TP_LOCK* GetLock() const { return &m_Lock; }
|
|||
|
|
MODE_DBG(BOOL IsLock() const { return m_Lock.IsLock(); });
|
|||
|
|
|
|||
|
|
LPVOID GetParam() const { return m_lpParam; }
|
|||
|
|
VOID SetParam(LPVOID lpParam) { m_lpParam = lpParam; }
|
|||
|
|
|
|||
|
|
LPVOID GetThis() { return this; }
|
|||
|
|
INT GetErrorCode() { return m_ErrorFormat.GetErrorCode(); }
|
|||
|
|
|
|||
|
|
VOID SetSckBufferSize(INT pRecvSckBufferSize, INT pSendSckBufferSize) {
|
|||
|
|
m_RecvSckBufferSize = pRecvSckBufferSize;
|
|||
|
|
m_SendSckBufferSize = pSendSckBufferSize;
|
|||
|
|
}
|
|||
|
|
VOID SetRecvSckBufferSize(INT pRecvSckBufferSize) { m_RecvSckBufferSize = pRecvSckBufferSize; }
|
|||
|
|
VOID SetSendSckBufferSize(INT pSendSckBufferSize) { m_SendSckBufferSize = pSendSckBufferSize; }
|
|||
|
|
INT GetRecvSckBufferSize() const { return m_RecvSckBufferSize; }
|
|||
|
|
INT GetSendSckBufferSize() const { return m_SendSckBufferSize; }
|
|||
|
|
|
|||
|
|
INT GetSockOpt(INT pLevel, INT pOptName, PCHAR pOptVal, PINT pOptLen) const;
|
|||
|
|
INT SetSockOpt(INT pLevel, INT pOptName, PCHAR pOptVal, INT pOptLen);
|
|||
|
|
|
|||
|
|
virtual BOOL CreateSocket() = 0;
|
|||
|
|
virtual BOOL Connect(LPCSTR lpszIpAddress, WORD wPortNumber) = 0;
|
|||
|
|
virtual BOOL Connect(ULONG uIpAddress, WORD wPortNumber) = 0;
|
|||
|
|
virtual VOID Disconnect() = 0;
|
|||
|
|
|
|||
|
|
virtual BOOL SendData(LPBYTE lpbtBuffer, INT iBufferSize, LPCSTR lpszIpAddress, WORD wPortNumber, BOOL bDoLock = TRUE) = 0; // UDP
|
|||
|
|
virtual BOOL SendData(LPBYTE lpbtBuffer, INT iBufferSize, ULONG uIpAddress, WORD wPortNumber, BOOL bDoLock = TRUE) = 0; // UDP
|
|||
|
|
virtual BOOL SendData(LPBYTE lpbtBuffer, INT iBufferSize, BOOL bDoLock = TRUE) = 0; // TCP / UDP
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
virtual VOID CloseSocket() = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܺη<DCBA><CEB7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>츸 public <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20><><EFBFBD>迡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
SOCKET m_sckThis;
|
|||
|
|
LPVOID m_lpParam;
|
|||
|
|
CErrorFormat m_ErrorFormat;
|
|||
|
|
mutable TP_LOCK m_Lock;
|
|||
|
|
INT m_RecvSckBufferSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ſ<EFBFBD> <20><><EFBFBD>Ϲ<EFBFBD><CFB9><EFBFBD> ũ<><C5A9> (<28><><EFBFBD><EFBFBD><EFBFBD>뵵)
|
|||
|
|
INT m_SendSckBufferSize; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ſ<EFBFBD> <20><><EFBFBD>Ϲ<EFBFBD><CFB9><EFBFBD> ũ<><C5A9> (<28><><EFBFBD><EFBFBD><EFBFBD>뵵)
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
// IMPLEMENTATION
|
|||
|
|
///////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : FUNCTION
|
|||
|
|
// NAME : CSessionBase::CSessionBase
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// PARM : N/A
|
|||
|
|
// RETV : N/A
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline CSessionBase::CSessionBase() : m_sckThis(INVALID_SOCKET), m_lpParam(NULL), m_RecvSckBufferSize(-1), m_SendSckBufferSize(-1)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : FUNCTION
|
|||
|
|
// NAME : CSessionBase::~CSessionBase
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : <20>Ҹ<EFBFBD><D2B8><EFBFBD>
|
|||
|
|
// PARM : N/A
|
|||
|
|
// RETV : N/A
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline CSessionBase::~CSessionBase()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : FUNCTION
|
|||
|
|
// NAME : CSessionBase::Reset
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : <20><>ü <20>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// PARM : N/A
|
|||
|
|
// RETV : N/A
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline VOID CSessionBase::Reset()
|
|||
|
|
{
|
|||
|
|
// m_lpParam = NULL;
|
|||
|
|
// m_RecvSckBufferSize = -1;
|
|||
|
|
// m_SendSckBufferSize = -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : FUNCTION
|
|||
|
|
// NAME : CSessionBase::Open
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : <20>⺻ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// PARM : N/A
|
|||
|
|
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20><EFBFBD> - <20><><EFBFBD><EFBFBD>
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline DWORD CSessionBase::Open()
|
|||
|
|
{
|
|||
|
|
DWORD dwRetVal = m_Lock.Open();
|
|||
|
|
if (NOERROR != dwRetVal) {
|
|||
|
|
return dwRetVal;
|
|||
|
|
}
|
|||
|
|
return NOERROR;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : FUNCTION
|
|||
|
|
// NAME : CSessionBase::Close
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : <20>⺻ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// PARM : N/A
|
|||
|
|
// RETV : N/A
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline VOID CSessionBase::Close()
|
|||
|
|
{
|
|||
|
|
m_Lock.Close();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : FUNCTION
|
|||
|
|
// NAME : CSessionBase::GetSockOpt
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> Ư<><C6AF> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// PARM : 1 . pLevel - <20><><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD>
|
|||
|
|
/*
|
|||
|
|
IPPROTO_IP
|
|||
|
|
IPPROTO_IPV6
|
|||
|
|
IPPROTO_TCP
|
|||
|
|
IPPROTO_UDP
|
|||
|
|
SOL_SOCKET
|
|||
|
|
SOL_IRLMP
|
|||
|
|
*/
|
|||
|
|
// 2 . pOptName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20≯<EFBFBD> (pLevel <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD><D9B8>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
|||
|
|
// 3 . pOptVal - <20><>û<EFBFBD><C3BB> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// 4 . pOptLen - <20><>û<EFBFBD><C3BB> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
|||
|
|
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20><EFBFBD> - <20><><EFBFBD><EFBFBD> (::WSAGetLastError() <20><>)
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
// P.S.>
|
|||
|
|
// - <20>Ʒ<EFBFBD> MSDN URL <20><><EFBFBD><EFBFBD> getsockopt() <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
|||
|
|
// http://msdn.microsoft.com/en-us/library/ms738544.aspx
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline INT CSessionBase::GetSockOpt(INT pLevel, INT pOptName, PCHAR pOptVal, PINT pOptLen) const
|
|||
|
|
{
|
|||
|
|
INT iRetVal = ::getsockopt(m_sckThis, pLevel, pOptName, pOptVal, pOptLen);
|
|||
|
|
if (SOCKET_ERROR == iRetVal)
|
|||
|
|
BASE_RETURN(::WSAGetLastError());
|
|||
|
|
|
|||
|
|
return NOERROR;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// TYPE : FUNCTION
|
|||
|
|
// NAME : CSessionBase::SetSockOpt
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
// DESC : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> Ư<><C6AF> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// PARM : 1 . pLevel - <20><><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD>
|
|||
|
|
/*
|
|||
|
|
IPPROTO_IP
|
|||
|
|
IPPROTO_IPV6
|
|||
|
|
IPPROTO_TCP
|
|||
|
|
IPPROTO_UDP
|
|||
|
|
SOL_SOCKET
|
|||
|
|
SOL_IRLMP
|
|||
|
|
*/
|
|||
|
|
// 2 . pOptName - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20≯<EFBFBD> (pLevel <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD><D9B8>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
|||
|
|
// 3 . pOptVal - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD>
|
|||
|
|
// 4 . pOptLen - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
|||
|
|
// RETV : NOERROR - <20><><EFBFBD><EFBFBD> / <20><EFBFBD> - <20><><EFBFBD><EFBFBD> (::WSAGetLastError() <20><>)
|
|||
|
|
// PRGM : B4nFter
|
|||
|
|
// P.S.>
|
|||
|
|
// - <20>Ʒ<EFBFBD> MSDN URL <20><><EFBFBD><EFBFBD> setsockopt() <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
|||
|
|
// http://msdn.microsoft.com/en-us/library/ms740476.aspx
|
|||
|
|
//*---------------------------------------------------------------
|
|||
|
|
inline INT CSessionBase::SetSockOpt(INT pLevel, INT pOptName, PCHAR pOptVal, INT pOptLen)
|
|||
|
|
{
|
|||
|
|
INT iRetVal = ::setsockopt(m_sckThis, pLevel, pOptName, pOptVal, pOptLen);
|
|||
|
|
if (SOCKET_ERROR == iRetVal)
|
|||
|
|
BASE_RETURN(::WSAGetLastError());
|
|||
|
|
|
|||
|
|
return NOERROR;
|
|||
|
|
}
|
|||
|
|
|