Develop and Download Open Source Software

Browse Subversion Repository

Diff of /SocketX/BaseSocket.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 11 by sho1get, Wed Feb 10 18:21:00 2010 UTC revision 13 by sho1get, Tue May 25 06:54:25 2010 UTC
# Line 104  LRESULT IBaseSocket::OnGetHostMessage(WP Line 104  LRESULT IBaseSocket::OnGetHostMessage(WP
104          int nErrorCode = WSAGETSELECTERROR(lParam);          int nErrorCode = WSAGETSELECTERROR(lParam);
105          HANDLE hTask   = (HANDLE)wParam;          HANDLE hTask   = (HANDLE)wParam;
106    
107          OnGetHostByName(hTask, nErrorCode);          doGetHostByName(hTask, nErrorCode);
108    
109          return 0;          return 0;
110  }  }
111    
 void IBaseSocket::OnGetHostByName(HANDLE hTask, int nErrorCode)  
 {  
         LPHOSTENT lpHostEnt = reinterpret_cast<LPHOSTENT>(m_HostName.buf);  
   
         if (m_HostName.hTask != hTask)  
         {  
                 TRACE0("***** ERROR: GetHostByName(Handle) *****\n");  
                 return;  
         }  
   
         m_SockMsg.pTgtObj->OnGetHostByNameMessage(lpHostEnt);  
 }  
   
112  BOOL IBaseSocket::CreateSocketWindow()  BOOL IBaseSocket::CreateSocketWindow()
113  {  {
114          CString strClass;          CString strClass;
# Line 342  BOOL IBaseSocket::ReceiveFrom(CByteArray Line 329  BOOL IBaseSocket::ReceiveFrom(CByteArray
329    
330  //////////////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////////////
331    
332    BOOL IBaseSocket::doGetHostByName(HANDLE hTask, int nErrorCode)
333    {
334            LPHOSTENT lpHostEnt = reinterpret_cast<LPHOSTENT>(m_HostName.buf);
335    
336            if (m_HostName.hTask != hTask)
337            {
338                    TRACE0("***** ERROR: GetHostByName(Handle) *****\n");
339                    return FALSE;
340            }
341    
342            m_SockMsg.pTgtObj->OnGetHostByNameMessage(lpHostEnt);
343    
344            return TRUE;
345    }
346    
347  BOOL IBaseSocket::doCloseSocket(SOCKET hSocket)  BOOL IBaseSocket::doCloseSocket(SOCKET hSocket)
348  {  {
349          if (closesocket(hSocket) != 0)          if (closesocket(hSocket) != 0)
# Line 556  BOOL IBaseSocket::doWSAIOCtl(SOCKET hSoc Line 558  BOOL IBaseSocket::doWSAIOCtl(SOCKET hSoc
558  BOOL IBaseSocket::doSend(SOCKET hSocket, const CByteArray &data)  BOOL IBaseSocket::doSend(SOCKET hSocket, const CByteArray &data)
559  {  {
560          CByteArray snd;          CByteArray snd;
561          size_t dataSize;          HEADER header;
562          size_t sendSize;          size_t dataSize, hdrSize;
563          size_t bufPtr;          size_t dataPtr, hdrPtr;
564          LONG   lEvent;          LONG   lEvent;
565          BOOL   fResult;          BOOL   fResult;
566          int    nRet;          int    nRet;
# Line 572  BOOL IBaseSocket::doSend(SOCKET hSocket, Line 574  BOOL IBaseSocket::doSend(SOCKET hSocket,
574          }          }
575    
576          dataSize = data.GetSize();          dataSize = data.GetSize();
577          sendSize = dataSize + sizeof(HEADER);          hdrSize  = sizeof(HEADER);
578          bufPtr   = 0;          dataPtr  = 0;
579            hdrPtr   = 0;
580          fResult  = TRUE;          fResult  = TRUE;
581    
582          snd.SetSize(sendSize);          header.size = dataSize;
583          ((LPHEADER)snd.GetData())->size = dataSize;          snd.SetSize(hdrSize);
584          CopyMemory((snd.GetData() + sizeof(HEADER)), data.GetData(), dataSize);          CopyMemory(snd.GetData(), &header, hdrSize);
585          snd.FreeExtra();          snd.FreeExtra();
586    
587          do          do
588          {          {
589                  nRet = send(hSocket, reinterpret_cast<const LPSTR>(snd.GetData() + bufPtr), sendSize, 0);                  // Send header
590                    nRet = send(hSocket, DATA_SEND(snd.GetData() + hdrPtr), hdrSize, 0);
591    
592                  if (nRet == SOCKET_ERROR)                  if (nRet == SOCKET_ERROR)
593                  {                  {
# Line 595  BOOL IBaseSocket::doSend(SOCKET hSocket, Line 599  BOOL IBaseSocket::doSend(SOCKET hSocket,
599                          }                          }
600                          else                          else
601                          {                          {
602                                  TRACE1("***** ERROR: send(%d) *****\n", m_dwError);                                  TRACE1("***** ERROR: send header(%d) *****\n", m_dwError);
603                                  fResult = FALSE;                                  fResult = FALSE;
604                                  break;                                  break;
605                          }                          }
606                  }                  }
607                  else                  else
608                  {                  {
609                          bufPtr   += nRet;                          hdrPtr  += nRet;
610                          sendSize -= nRet;                          hdrSize -= nRet;
611                    }
612            }
613            while (hdrSize > 0);
614    
615            if (fResult)
616            {
617                    do
618                    {
619                            // Send data
620                            nRet = send(hSocket, DATA_SEND(data.GetData() + dataPtr), dataSize, 0);
621    
622                            if (nRet == SOCKET_ERROR)
623                            {
624                                    m_dwError = GetLastError();
625    
626                                    if (m_dwError == WSAEWOULDBLOCK)
627                                    {
628                                            continue;
629                                    }
630                                    else
631                                    {
632                                            TRACE1("***** ERROR: send data(%d) *****\n", m_dwError);
633                                            fResult = FALSE;
634                                            break;
635                                    }
636                            }
637                            else
638                            {
639                                    dataPtr  += nRet;
640                                    dataSize -= nRet;
641                            }
642                  }                  }
643                    while (dataSize > 0);
644          }          }
         while (sendSize > 0);  
645    
646          if ((lEvent != 0) && (lEvent & FD_WRITE))          if ((lEvent != 0) && (lEvent & FD_WRITE))
647          {          {
# Line 636  BOOL IBaseSocket::doReceive(SOCKET hSock Line 671  BOOL IBaseSocket::doReceive(SOCKET hSock
671          }          }
672    
673          // Receive header          // Receive header
674          nRet = recv(hSocket, reinterpret_cast<LPSTR>(&header.size), sizeof(HEADER), MSG_PEEK);          nRet = recv(hSocket, DATA_RECEIVE(&header), sizeof(HEADER), MSG_PEEK);
675    
676          if (nRet == sizeof(HEADER))          if (nRet == sizeof(HEADER))
677          {          {
# Line 651  BOOL IBaseSocket::doReceive(SOCKET hSock Line 686  BOOL IBaseSocket::doReceive(SOCKET hSock
686                  do                  do
687                  {                  {
688                          // Receive data                          // Receive data
689                          nRet = recv(hSocket, reinterpret_cast<LPSTR>(data.GetData() + bufPtr), recvSize, 0);                          nRet = recv(hSocket, DATA_RECEIVE(data.GetData() + bufPtr), recvSize, 0);
690    
691                          if (nRet == SOCKET_ERROR)                          if (nRet == SOCKET_ERROR)
692                          {                          {
# Line 680  BOOL IBaseSocket::doReceive(SOCKET hSock Line 715  BOOL IBaseSocket::doReceive(SOCKET hSock
715                  if (data.GetSize() >= sizeof(HEADER))                  if (data.GetSize() >= sizeof(HEADER))
716                  {                  {
717                          data.RemoveAt(0, sizeof(HEADER));                          data.RemoveAt(0, sizeof(HEADER));
                         data.FreeExtra();  
718                  }                  }
719          }          }
720          else          else

Legend:
Removed from v.11  
changed lines
  Added in v.13

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26