제 소스의 문제점 지적 부탁드립니다.

살자의 이미지

안녕하세요.

저의 소스에 문제점 지적 부탁드립니다.
udp로 받은 packet을 local에 있는 다른 곳으로 바로 보내는 프로그램 입니다.
너무 허접한데 어떻문제가 발생될수 있는지 알고싶어서 입니다.
고수님들의 많은 조언 부탁드립니다. 미리 감사 드립니다. ^^

///-->> udp.cpp

      4 CUDP::CUDP()
      5 {
      6     memset(m_szServerAddr, 0, sizeof(m_szServerAddr));
      7     m_iServerPort = 0;
      8     m_iSock = socket(AF_INET, SOCK_DGRAM, 0);
      9     if(m_iSock == SOCKET_ERROR)
     10         TRACELOG(LOG_ERR, "SOCKET ERROR");
     11 }
     12
     13 CUDP::~CUDP()
     14 {
     15     if(m_iSock == INVALID_SOCKET)
     16         return;
     17     close(m_iSock);
     18 }
     19
     20 bool CUDP::fnStart(int _iPort, char*_lpAddr/*=""*/)
     21 {
     22     int     opt;
     23     int     iLen;
     24     int     iStat;
     25     char*   pszLog;
     26     struct sockaddr_in sin;
     27
     28     ///////////////////////////////////////////////////////////////////////////////
     29     //{강제 바인딩을 하기 위하여 사용한다.
     30     opt = 1;
     31     setsockopt(m_iSock, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt));
     32     //}강제 바인딩을 하기 위하여 사용한다.
     33     ///////////////////////////////////////////////////////////////////////////////
     34
     35     iLen = sizeof(sin);
     36     memset(&sin, 0, sizeof(sin));
     37     sin.sin_family = AF_INET;
     38     if(strlen(_lpAddr) > 0)
     39         sin.sin_addr.s_addr = inet_addr(_lpAddr);
     40     else
     41         sin.sin_addr.s_addr = htonl(INADDR_ANY);
     42     sin.sin_port = htons(_iPort);
     43
     44     iStat = bind(m_iSock, (struct sockaddr*) &sin, iLen);
     45     if(iStat == SOCKET_ERROR)
     46     {
     47         pszLog = fnGetBuf("BIND ERROR SOCKET : %d PORT : %d", m_iSock,  _iPort);
     48         TRACELOG(LOG_TRACE, pszLog);
     49     }
     50     else
     51     {
     52         strcpy(m_szServerAddr, _lpAddr);
     53         m_iServerPort = _iPort;
     54
     55         pszLog = fnGetBuf("BIND SUCCESS SOCKET : %d  PORT : %d", m_iSock,  _iPort);
     56         TRACELOG(LOG_TRACE, pszLog);
     57         return true;
     58     }
     59     return false;
     60 }
     61
     62
     63 bool CUDP::fnSendTo(char *_lpAddr, int _iPort, char *_lpData, int _iLen)
     64 {
     65     int iLen;
     66     int iRet;
     67     struct sockaddr_in sin;
     68
     69     iLen = sizeof(sin);
     70     sin.sin_family = AF_INET;
     71     sin.sin_addr.s_addr = inet_addr(_lpAddr);
     72     sin.sin_port  = htons(_iPort);
     73     iRet = sendto(m_iSock, _lpData, _iLen, 0, (struct sockaddr *)&sin, iLen);
     74
     75     if( iRet != SOCKET_ERROR)
     76         return true;
     77
     78     return false;
     79 }
     80
     81 bool CUDP::fnRcvFrom(char *_lpAddr, int *_piPort, char *_lpData, int _iLen)
     82 {
     83     int iLen;
     84     int iRet;
     85     struct sockaddr_in sin;
     86
     87     iLen = sizeof(sin);
     88     iRet = recvfrom(m_iSock, _lpData, _iLen, 0, (struct sockaddr*) &sin, (socklen_t*) &iLen);
     89
     90     strcpy(_lpAddr, inet_ntoa(sin.sin_addr));
     91     *_piPort = ntohs(sin.sin_port);
     92
     93     if(iRet != SOCKET_ERROR)
     94         return true;
     95
     96     if(errno == 0)
     97         return true;
     98     return false;
     99 }
    100

//-->> threadproc.cpp

    1  void* CThreadProc::fnOnRecvSMSStatus(void* _pArg)
    2  {
    3
    4      CUDP    RecvUDP;
    5      CUDP    SendUDP;
    6
    7      int     iRet;
    8      int     iServPort;
    9
    10     char    szServIP[SM_STR_SIZE];
    11     char    szRecvbuf[MD_STR_SIZE];
    12
    13     fd_set  readable;
    14     TIMEVAL timeout;
    15
    16     memset(szServIP,  0x00, sizeof(szServIP));
    17     memset(szRecvbuf, 0x00, sizeof(szRecvbuf));
    18
    19     RecvUDP.fnStart(9821, "");
    20
    21     while(true)
    22     {
    23         FD_ZERO(&readable);
    24         FD_SET(RecvUDP.m_iSock, &readable);
    25
    26         timeout.tv_sec  = 0;
    27         timeout.tv_usec = 100 * 1000;
    28
    29         iRet = select(RecvUDP.m_iSock + 1, &readable, 0, 0, &timeout);
    30         if (iRet <= 0)
    31             continue;
    32
    33         if (!RecvUDP.fnRcvFrom(szServIP, &iServPort, szRecvbuf, sizeof(szRecvbuf)))
    34         {
    35             printf("[fnOnRecvSMSStatus] RecvUDP.fnRcvFrom ERROR!!\n");
    36             continue;
    37         }
    38
    39         SendUDP.fnSendTo("127.0.0.1", 9820, szRecvbuf, strlen(szRecvbuf) + 1);
    40
    41         printf("[fnOnRecvSMSStatus] Recv Message : %s\n", szRecvbuf);
    42     }
    43
    44     return NULL;
    45 }

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.