亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ddksocket.cpp

?? 用于開發(fā)Modbus工業(yè)級通信
?? CPP
字號:
// DDKSocket.cpp: implementation of the CDDKSocket class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


// WSA initalized
BOOLEAN				CDDKSocket::m_wsaInitialized = FALSE;
// WSA interlocking
CRITICAL_SECTION    CDDKSocket::m_wsaCS;
CRITICAL_SECTION *	CDDKSocket::m_pwsaCS = NULL;

IMPLEMENT_DYNAMIC( CDDKSocket, CObject );
//IMPLEMENT_DYNCREATE( CDDKSocket, CObject );

CDDKSocket::CDDKSocket()
{
   m_socket = INVALID_SOCKET;
   m_serverObject = FALSE;
   // do WSA start-up
   Initialize();

   { // Create a Client socket

   }
}


CDDKSocket::CDDKSocket(DWORD timeout)
{
   m_socket = INVALID_SOCKET;
   m_serverObject = FALSE;
   // do WSA start-up
   Initialize();

   { // Create a Client socket

   }
}

// -------------------------------- CloseSocket -------------------------------
//  Close a socket
BOOL CDDKSocket::CloseSocket(BOOL gracefully /*= FALSE */, SOCKET sock/* = NULL*/)
{
SOCKET lSock;
linger lingerOpt;
int sockError=0;
   
   if (NULL == sock)
      lSock = *m_pSocket;
   else
      lSock = sock;

   if ((gracefully)&&(NULL != lSock))
   {
      // set up LINGER to do a gracefull close.
      lingerOpt.l_linger = SO_LINGER;
      lingerOpt.l_onoff = TRUE;
      sockError = setsockopt(lSock, SOL_SOCKET, SO_LINGER, (CHAR*)&lingerOpt, sizeof(lingerOpt));

      sockError = shutdown(lSock, SD_SEND ); // disable any more sends on the shut
      if (sockError)
         sockError = wsaerrno;
      if (WSAENOTSOCK == sockError+WSABASEERR)
         lSock = NULL;
      //
   }
   if (NULL != lSock)
      sockError = closesocket(lSock);
   return (TRUE);
} // CloseSocket

// -------------------------------- Initialize -------------------------------
void CDDKSocket::Initialize()
{
int errCode;
	
	// Init the WSA only once
	EnterWSA();
	if (!m_wsaInitialized)
	{
		m_wVersionRequested = MAKEWORD( 1, 1 );
		errCode = WSAStartup( m_wVersionRequested, &(m_WSAData) );
      if ( errCode != 0 )
      {
         // ? Tell the user that we could not find a usable WinSock DLL.
         OutputDebugString("Unable to find a useable WinSock DLL"); 
      }
	}
	LeaveWSA();

   // init all internal variables
	m_CallBackFuncPtr = NULL; // set the CB pointer to null
	m_listenThreadStatus  = SOCKET_EX_TERMINATED;  
	m_listenThreadCreated = FALSE;
	m_pWorkerThread       = NULL;
   memset((void * ) &(m_destSockaddr_in), 0, sizeof (m_destSockaddr_in));
   memset((void * ) &(m_localSockaddr_in), 0, sizeof (m_localSockaddr_in));
   m_socket = INVALID_SOCKET;
   m_serverBufferSize = 2048;
   m_buffer = NULL;
}


// ------------------------------- ~CDDKSocket --------------------------
CDDKSocket::~CDDKSocket()
{
   //OutputDebugString("In Base socket destructor\n");
   if (NULL!=m_socket)
   {
      OutputDebugString("Base: Client socket closing\n");
      closesocket(m_socket); //kill accepted instance immediately
   }

//	EnterWSA();
//	if (m_wsaInitialized)
//	{
//		WSACleanup();
//	}
//	LeaveWSA();
   OutputDebugString("[DEBUGSTEP]\n");
   if (NULL != m_buffer)
      delete m_buffer;
   //OutputDebugString("Leaving Base socket destructor\n");

}

#ifdef _DEBUG
VOID CDDKSocket::Dump(CDumpContext& dc) const
{
   // call the base class first
   CObject::Dump(dc);

   // dump our object to the debuggers output
   // all important members can be dumped at this stage.
   dc << "Socket: " << "\n";
} // Dump
#endif // _DEBUG


// ------------------------- SockStateChanged ----------------------------
void CDDKSocket::SockStateChanged(DWORD state)
{
   // do nothing in the base class
} // SockStateChanged

void CDDKSocket::SockDataMessage(LPCTSTR msg)
{

}

// ------------------------- SockDataDebugger ----------------------------
void CDDKSocket::SockDataDebugger(const CHAR * buffer, LONG length, BOOL transmit)
{
CString prefix, ASCIIdata;
LONG index, i;
   if (transmit)
      prefix = "TX:";
   else
      prefix = "RX:";
   index = 0;
   while (index < length)
   {
      i=0;
      OutputDebugString("\n");
      OutputDebugString(prefix);
      while ((index+i < length)&&(i<8))
      {
         ASCIIdata.Format("%02X", buffer[index+i]);
         OutputDebugString(ASCIIdata);
         i++;
      }
      index +=8;
   }
} // SockDataDebugger

// --------------------------------- GetSockError -------------------------
void CDDKSocket::GetSockError(CHAR * errString, BOOL reset/*=true*/)
{
LONG wx = wsaerrno;

   sprintf(errString,sys_wsaerrlist[wx]);
    if (reset) WSASetLastError(0);
} // GetSockError

// -------------------------------- EnterWSA -------------------------------
void CDDKSocket::EnterWSA()
{
   // If the critical section has not been instantiated,
   // instantiate and initialize and enter
   if( NULL != m_pwsaCS)
      EnterCriticalSection(m_pwsaCS);
   else
   {
      m_pwsaCS = &m_wsaCS;
      InitializeCriticalSection(m_pwsaCS);
      EnterCriticalSection(m_pwsaCS);
   }
} // EnterWSA


// -------------------------------- LeaveWSA -------------------------------
void CDDKSocket::LeaveWSA()
{
	LeaveCriticalSection(m_pwsaCS);
}



// --------------------------- Recieve -------------------------------
LONG CDDKSocket::Recieve(SOCKET ackSock, //The accepted socket
                           int    numberOfBytesToRead,// -> number of bytes to read.
                           CHAR * BufferPtr,       //<- Data read from socket    
                           CHAR * debugStrPtr       //Any errors 
                          )
{
//returns -1 if error, or the number actualy read from socket
int numread;
int temp;
//CHAR   buf[1000];
//CHAR * buffPtr = buf;

//memset(buf,3,sizeof(buf));

   
   //call recv func
   int check1 = 0x1234;
   numread =  recv(ackSock,                    // Our precious socket
                   BufferPtr,//buffPtr,                  // RxBuffer 
                   (INT) numberOfBytesToRead,
                   (INT) NULL                  // no fancy flaggies
                  ); 
   int check2 = 0x5678;

   if (numread != 0xffffffff)
      SockDataDebugger(BufferPtr, numread, FALSE);// a leettel debugger msg

   //on sock_error
   if (SOCKET_ERROR == numread) 
   {
      m_socketStatus = SOCKET_UNHEALTHY;
      temp = wsaerrno;
      (temp >= 0) ? (sprintf(debugStrPtr, "Read Error on Listen socket : %s\n",sys_wsaerrlist[temp]))
                     : (sprintf(debugStrPtr, "Unknown Read error on Listen socket\n"));
      WSASetLastError(0);
      OutputDebugString(debugStrPtr);
      CloseSocket(TRUE, ackSock);
      return(-1);
   }
   //on mismatch
   if (numread != numberOfBytesToRead)
   {
       m_socketStatus = SOCKET_UNHEALTHY;
       sprintf(debugStrPtr, "Read Timeout (%ld/%ld) ", numread,numberOfBytesToRead);
       OutputDebugString(debugStrPtr);
       return(numread);
       //I expect the caller to initiatate retries or whatever!
   }
   else
      m_socketStatus = SOCKET_HEALTHY;
   return(numread);
}

// --------------------------- Send -------------------------------
LONG CDDKSocket::Send(SOCKET ackSock, //The accepted socket
                           int    numberOfBytesToWrite,// -> number of bytes to write
                           CHAR * BufferPtr,       //<- Data read from socket    
                           CHAR * debugStrPtr       //Any errors 
                          )
{
//returns -1 if error, or the number actualy read from socket
int temp;
int numberOfBytesWritten; 

   numberOfBytesWritten = send(ackSock,
                               BufferPtr,
                               (INT) numberOfBytesToWrite,
                               (INT) NULL
                              );
   if (SOCKET_ERROR == numberOfBytesWritten) 
   {
      // We have a socket transmit error, so time to start counting down to a socket reset
      numberOfBytesWritten = 0;
      m_socketStatus = SOCKET_UNHEALTHY;
      temp = wsaerrno;
      (temp >= 0) ? (sprintf(debugStrPtr, "Write Error on Listen socket : %s\n",sys_wsaerrlist[temp]))
                     : (sprintf(debugStrPtr, "Unknown Write error on Listen socket\n"));
      WSASetLastError(0);
      OutputDebugString(debugStrPtr);
      return(-1);
   }

   // a leettel debugger msg
   SockDataDebugger(BufferPtr, numberOfBytesWritten, TRUE);
   //on mismatch
   if (numberOfBytesWritten != numberOfBytesToWrite)
   {
       m_socketStatus = SOCKET_UNHEALTHY;
       sprintf(debugStrPtr, "Write Timeout (%ld/%ld) ", numberOfBytesToWrite,numberOfBytesToWrite);
       //OutputDebugString(debugStrPtr);
       //I expect the caller to initiatate retries or whatever!
   }
   else
      m_socketStatus = SOCKET_HEALTHY;
   return(numberOfBytesWritten);
} // Send

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区成人久久免费影院| 国产精品123| 亚洲欧美日韩久久| 亚洲欧美在线观看| 亚洲一区二区美女| 激情五月播播久久久精品| 成人午夜伦理影院| 欧美精品 日韩| 久久夜色精品国产噜噜av| 最新中文字幕一区二区三区| 亚洲成av人片一区二区三区| 国产suv精品一区二区三区| 午夜影院在线观看欧美| 欧美不卡视频一区| 国产九色sp调教91| 欧美大黄免费观看| 一区二区三区中文字幕电影| 国产精品一区二区不卡| 欧美日韩视频一区二区| 久久色视频免费观看| 久久国产精品99精品国产| 一区二区三区免费在线观看| 一级女性全黄久久生活片免费| 免费久久99精品国产| 高潮精品一区videoshd| 中文字幕欧美国产| 欧美精品一二三| 国产毛片精品视频| 亚洲人成网站在线| 在线视频你懂得一区二区三区| 99国产精品视频免费观看| 精品人在线二区三区| 国产九色sp调教91| 91麻豆精品国产91久久久更新时间| 91在线免费视频观看| 亚洲va天堂va国产va久| 欧美tickling挠脚心丨vk| 精品视频在线视频| 久久 天天综合| 欧美精品免费视频| 欧美电影在哪看比较好| www.日韩在线| 奇米777欧美一区二区| 国产精品午夜电影| 欧美精品一区二区三区蜜桃 | 91丝袜国产在线播放| 国产在线观看一区二区| www.欧美日韩| 欧美三级欧美一级| 欧美一级久久久| 中文字幕精品一区二区精品绿巨人 | 日韩美女一区二区三区四区| 奇米综合一区二区三区精品视频 | 艳妇臀荡乳欲伦亚洲一区| 99久久精品国产一区二区三区 | eeuss鲁片一区二区三区 | 国产精品久久久久久亚洲毛片 | 91福利资源站| 久久超碰97人人做人人爱| 波多野结衣亚洲一区| 亚洲香蕉伊在人在线观| 欧美影院精品一区| 午夜欧美电影在线观看| 色噜噜狠狠色综合欧洲selulu| 樱花草国产18久久久久| 日本久久精品电影| 国产一区二区三区四| 久久国产生活片100| 国产精品黄色在线观看| 99在线精品观看| 国产精品一级在线| 韩日精品视频一区| 美日韩一级片在线观看| 日韩中文字幕不卡| 亚洲一区二区三区不卡国产欧美| 1024成人网| 亚洲欧美日韩国产综合| 17c精品麻豆一区二区免费| 亚洲欧洲日韩综合一区二区| 亚洲视频免费看| 亚洲视频综合在线| 一区二区国产盗摄色噜噜| 一区二区久久久久| 亚洲aⅴ怡春院| 日韩avvvv在线播放| 日产精品久久久久久久性色| 免费看日韩精品| 久久福利资源站| 国产在线视频不卡二| 国产精品一线二线三线精华| 成人综合婷婷国产精品久久蜜臀 | 国产欧美一区二区精品秋霞影院| 久久久亚洲精品一区二区三区 | 久久亚洲影视婷婷| 久久久久久毛片| 亚洲特黄一级片| 亚洲国产日产av| 老司机免费视频一区二区| 日韩va欧美va亚洲va久久| 蜜桃精品视频在线| 丁香婷婷深情五月亚洲| 99在线精品观看| 欧美区一区二区三区| 日韩三级精品电影久久久 | 亚洲va在线va天堂| 久久国产生活片100| 粉嫩av一区二区三区在线播放| 91丝袜高跟美女视频| 欧美日本在线播放| 久久综合99re88久久爱| 国产精品乱人伦中文| 亚洲v中文字幕| 国产精品996| 在线免费观看不卡av| 欧美大片在线观看一区二区| 国产欧美一区二区精品秋霞影院| 亚洲香肠在线观看| 国产精品一区二区免费不卡| 99re这里只有精品首页| 欧美一区二区三区成人| 国产精品美女视频| 天天色天天操综合| 大陆成人av片| 欧美一级日韩免费不卡| 中文字幕亚洲欧美在线不卡| 日本人妖一区二区| 色综合久久中文综合久久97 | 在线观看中文字幕不卡| 欧美不卡视频一区| 亚洲午夜精品17c| 国产不卡视频在线播放| 欧美理论片在线| **欧美大码日韩| 国产激情视频一区二区三区欧美| 在线中文字幕不卡| 亚洲国产精品成人综合色在线婷婷| 午夜精品123| 97国产一区二区| 2020日本不卡一区二区视频| 五月天精品一区二区三区| 99久久免费视频.com| 久久香蕉国产线看观看99| 亚洲h在线观看| 91国模大尺度私拍在线视频| 国产午夜亚洲精品理论片色戒| 日本一道高清亚洲日美韩| 91美女在线视频| 国产欧美综合色| 国产精品影音先锋| 日韩欧美自拍偷拍| 亚洲一区二区三区三| 成人99免费视频| 国产色产综合色产在线视频| 免播放器亚洲一区| 7777精品伊人久久久大香线蕉| 亚洲美女精品一区| 99精品欧美一区二区蜜桃免费| 国产色综合一区| 国产麻豆一精品一av一免费| 日韩一本二本av| 秋霞av亚洲一区二区三| 91精品国产综合久久香蕉的特点| 亚洲自拍另类综合| 欧美在线三级电影| 亚洲高清在线视频| 欧美裸体bbwbbwbbw| 亚洲第一福利视频在线| 欧美日韩一区在线观看| 亚洲成精国产精品女| 欧美日韩亚洲综合一区| 午夜av一区二区三区| 91麻豆精品久久久久蜜臀| 美国一区二区三区在线播放| 3d成人动漫网站| 老色鬼精品视频在线观看播放| 日韩一区二区三区视频在线| 久久超级碰视频| 国产欧美一区二区三区鸳鸯浴| 丰满白嫩尤物一区二区| 国产精品久久久久久久午夜片 | 免费成人av在线| 日韩欧美一级特黄在线播放| 麻豆成人av在线| 久久亚洲影视婷婷| youjizz久久| 亚洲一区在线观看免费观看电影高清| 91福利视频久久久久| 日本伊人午夜精品| 亚洲精品在线三区| 成人网在线播放| 一级做a爱片久久| 日韩一区二区三区在线视频| 国产一区啦啦啦在线观看| 国产视频一区二区在线| 91视视频在线观看入口直接观看www | 在线观看av一区二区| 视频一区视频二区在线观看| 精品国精品国产尤物美女| 成人高清伦理免费影院在线观看| 一级特黄大欧美久久久|