Changeset 61 in cheroxy for trunk


Ignore:
Timestamp:
01/25/13 17:54:39 (11 years ago)
Author:
cheese
Message:

#1 apply reuseaddr

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/CRXException.h

    r35 r61  
    5959    } while (0)
    6060
     61
     62#define CRX_SYSTEM_ERROR()  CRXException::GetSystemErrorCode ()
     63
    6164class CRXException
    6265{
     
    7073
    7174public:
     75    static int  GetSystemErrorCode      (void);
     76
     77public:
    7278    /* get */
    7379    int         GetErrorCode            (void) const;
    7480
    7581    std::string GetErrorMessage         (void) const;
    76 
    77     int         GetSystemErrorCode      (void) const;
    7882
    7983    /* set */
  • trunk/include/CRXSocket.h

    r59 r61  
    3636#define ERROR_TCPSOCKET_FAILED_TO_SET_SOCKOPT   ERROR_TCPSOCKET - 12
    3737#define ERROR_TCPSOCKET_FAILED_TO_SET_TIMEOUT   ERROR_TCPSOCKET - 13
     38#define ERROR_TCPSOCKET_FAILED_TO_GET_SOCKOPT   ERROR_TCPSOCKET - 14
    3839
    3940class CRXSocket : public CRXException
    4041{
    4142private:
    42     static bool         mInitialized;
    4343    struct sockaddr_in  mAddress;
    4444    int                 mSocket;
     
    7373     * common functions
    7474     */
    75     CRXSocket                   (int aSocket = 0);
     75    CRXSocket                   (int aSocket = -1);
    7676
    7777    ~CRXSocket                  (void);
     
    8686
    8787    CRXSocket   & operator =    (int aSocket);
     88
     89    int         GetOption       (const int  aOptName,
     90                                 void       * aOptVal,
     91                                 size_t     * aOptLen);
    8892
    8993    int         SetOption       (const int      aOptName,
  • trunk/src/CRXException.cpp

    r27 r61  
    4343
    4444int
    45 CRXException::GetSystemErrorCode (void) const
     45CRXException::GetSystemErrorCode (void)
    4646{
    4747    /*----------------------------------------------------------------*/
  • trunk/src/CRXProxy.cpp

    r56 r61  
    9696    {
    9797        aResult = mClient.Receive (&aBuffer, 1);
    98         if (aResult < 0)
     98        if (aResult == -1)
    9999        {
    100100            aResult = ERROR_PROXY_FAILED_TO_RECEIVE_REQUEST;
     
    159159            CRX_ADD_SUBCLASS_ERROR (mServer);
    160160            CRX_ERROR_SET (aResult, "Failed to receive from server.");
    161             return aResult;
     161            break;
    162162        }
    163163        else if (aResult == 0)
     
    184184                aResult = ERROR_PROXY_FAILED_TO_SET_RESPONSE;
    185185                CRX_ERROR_SET (aResult, "Failed to set response.");
    186                 return aResult;
     186                break;
    187187            }
    188188            else if (aResult == 0)
     
    200200    int aResult = 0;
    201201    int aLength = 0;
     202
    202203    /*----------------------------------------------------------------*/
    203204    aLength = mHttpResponse.GetHeader ().length ();
  • trunk/src/CRXSocket.cpp

    r59 r61  
    1111#endif
    1212
    13 bool CRXSocket::mInitialized = false;
     13bool gInitialized = false;
    1414
    1515CRXSocket::CRXSocket (int aSocket)
    16     : mSocket (aSocket)
    1716{
    1817    /*----------------------------------------------------------------*/
     
    2019
    2120    memset ((void *)&mAddress, 0x0, sizeof (struct sockaddr_in));
     21
     22    Attach (aSocket);
    2223    /*----------------------------------------------------------------*/
    2324}
     
    3334CRXSocket::Attach (int aSocket)
    3435{
     36    int     aResult = 0;
     37    int     aReuseAddress = 0;
     38    size_t  aReuseAddressLength = sizeof (aReuseAddress);
     39
    3540    /*----------------------------------------------------------------*/
    3641    mSocket = aSocket;
     42
     43    if (mSocket < 0)
     44        return ;
     45
     46    aResult = GetOption (SO_REUSEADDR,
     47                         &aReuseAddress,
     48                         &aReuseAddressLength);
     49    if (aResult < 0)
     50    {
     51        aResult = ERROR_TCPSOCKET_FAILED_TO_GET_SOCKOPT;
     52        CRX_ERROR_SET (aResult, "Failed to get socket option (reuseaddr).(%d)", mSocket);
     53    }
     54
     55    if (aReuseAddress == 1)
     56        return ;
     57
     58    aReuseAddress = 1;
     59
     60    aResult = SetOption (SO_REUSEADDR,
     61                         &aReuseAddress,
     62                         sizeof (aReuseAddress));
     63    if (aResult < 0)
     64    {
     65        aResult = ERROR_TCPSOCKET_FAILED_TO_SET_SOCKOPT;
     66        CRX_ERROR_SET (aResult, "Failed to set socket option (reuseaddr).(%d)", mSocket);
     67    }
    3768    /*----------------------------------------------------------------*/
    3869}
     
    4576    /*----------------------------------------------------------------*/
    4677    mSocket = 0;
    47 
    4878    /*----------------------------------------------------------------*/
    4979    return aSocket;
     
    76106    /*----------------------------------------------------------------*/
    77107    return *this;
     108}
     109
     110int
     111CRXSocket::GetOption (const int aOptName,
     112                      void      * aOptVal,
     113                      size_t    * aOptLen)
     114{
     115    int aResult = 0;
     116
     117    /*----------------------------------------------------------------*/
     118    aResult = getsockopt (mSocket,
     119                          SOL_SOCKET,
     120                          aOptName,
     121#ifdef _WIN32
     122                          (char *) aOptVal,
     123#else
     124                          aOptVal,
     125#endif
     126                          (socklen_t *) aOptLen);
     127    if (aResult < 0)
     128    {
     129        aResult = ERROR_TCPSOCKET_FAILED_TO_GET_SOCKOPT;
     130        CRX_ERROR_SET (aResult, "Failed to get socket option.");
     131    }
     132    /*----------------------------------------------------------------*/
     133
     134    return aResult;
    78135}
    79136
     
    84141{
    85142    int aResult = 0;
     143
    86144    /*----------------------------------------------------------------*/
    87145    aResult = setsockopt (mSocket,
     
    162220#endif
    163221
    164     mInitialized = true;
     222    gInitialized = true;
    165223
    166224    /*----------------------------------------------------------------*/
     
    183241    /*----------------------------------------------------------------*/
    184242    /*----------------------------------------------------------------*/
    185     return mInitialized;
     243    return gInitialized;
    186244}
    187245
     
    206264{
    207265    int aResult = -1;
     266    int aReuseAddress = 1;
    208267
    209268    /*----------------------------------------------------------------*/
     
    219278    {
    220279        aResult = ERROR_TCPSOCKET_FAILED_TO_CREATE_SOCKET;
    221         CRX_ERROR_SET (aResult, "Failed to create socket(%d).", GetSystemErrorCode ());
     280        CRX_ERROR_SET (aResult, "Failed to create socket(%d).", CRX_SYSTEM_ERROR ());
    222281        return aResult;
    223282    }
     
    225284    mSocket = aResult;
    226285
    227     /*----------------------------------------------------------------*/
     286    aResult = SetOption (SO_REUSEADDR,
     287                         &aReuseAddress,
     288                         sizeof (aReuseAddress));
     289    if (aResult < 0)
     290    {
     291        aResult = ERROR_TCPSOCKET_FAILED_TO_SET_SOCKOPT;
     292        CRX_ERROR_SET (aResult, "Failed to set socket option (reuseaddr).");
     293    }
     294    /*----------------------------------------------------------------*/
     295
    228296    return aResult;
    229297}
     
    243311    {
    244312        aResult = ERROR_TCPSOCKET_FAILED_TO_CREATE_SOCKET;
    245         CRX_ERROR_SET (aResult, "Failed to create socket(%d).", GetSystemErrorCode ());
     313        CRX_ERROR_SET (aResult, "Failed to create socket(%d).", CRX_SYSTEM_ERROR ());
    246314        return aResult;
    247315    }
     
    267335    aLinger.l_linger = 0;
    268336    aResult = SetOption (SO_LINGER,
    269                           &aLinger,
    270                           sizeof (aLinger));
     337                         &aLinger,
     338                         sizeof (aLinger));
    271339    if (aResult < 0)
    272340    {
     
    279347    {
    280348        aResult = ERROR_TCPSOCKET_FAILED_TO_SET_TIMEOUT;
    281         CRX_ERROR_SET (aResult, "Failed to set timeout (%d).", GetSystemErrorCode ());
     349        CRX_ERROR_SET (aResult, "Failed to set timeout (%d).", CRX_SYSTEM_ERROR ());
    282350        return aResult;
    283351    }
     
    287355    {
    288356        aResult = ERROR_TCPSOCKET_FAILED_TO_CONNECT;
    289         CRX_ERROR_SET (aResult, "Failed to connect (%d).", GetSystemErrorCode ());
     357        CRX_ERROR_SET (aResult, "Failed to connect (%d).", CRX_SYSTEM_ERROR ());
    290358    }
    291359    /*----------------------------------------------------------------*/
     
    301369    int aResult = -1;
    302370
    303     int aReuseAddress = 1;
    304 
    305371    /*----------------------------------------------------------------*/
    306372    aResult = CreateSocket ();
     
    308374    {
    309375        aResult = ERROR_TCPSOCKET_FAILED_TO_CREATE_SOCKET;
    310         CRX_ERROR_SET (aResult, "Failed to create socket(%d).", GetSystemErrorCode ());
    311         return aResult;
    312     }
    313 
    314     aResult = SetOption (SO_REUSEADDR,
    315                          &aReuseAddress,
    316                          sizeof (aReuseAddress));
    317     if (aResult < 0)
    318     {
    319         aResult = ERROR_TCPSOCKET_FAILED_TO_SET_SOCKOPT;
    320         CRX_ERROR_SET (aResult, "Failed to set socket option (reuseaddr).");
     376        CRX_ERROR_SET (aResult, "Failed to create socket(%d).", CRX_SYSTEM_ERROR ());
     377        return aResult;
    321378    }
    322379
     
    329386    {
    330387        aResult = ERROR_TCPSOCKET_FAILED_TO_BIND;
    331         CRX_ERROR_SET (aResult, "Failed to bind(%d).", GetSystemErrorCode ());
     388        CRX_ERROR_SET (aResult, "Failed to bind(%d).", CRX_SYSTEM_ERROR ());
    332389        return aResult;
    333390    }
     
    337394    {
    338395        aResult = ERROR_TCPSOCKET_FAILED_TO_LISTEN;
    339         CRX_ERROR_SET (aResult, "Failed to listen(%d).", GetSystemErrorCode ());
     396        CRX_ERROR_SET (aResult, "Failed to listen(%d).", CRX_SYSTEM_ERROR ());
    340397        return aResult;
    341398    }
     
    346403        memcpy ((void *)aAddress, (void *)&mAddress, sizeof (struct sockaddr_in));
    347404    }
    348 
    349     /*----------------------------------------------------------------*/
     405    /*----------------------------------------------------------------*/
     406
    350407    return aResult;
    351408}
     
    359416    struct sockaddr_in  aAddress;
    360417    socklen_t           aLength = sizeof (aAddress);
    361 
    362418    /*----------------------------------------------------------------*/
    363419    if (!IsReady ())
     
    368424    {
    369425        aResult = ERROR_TCPSOCKET_FAILED_TO_ACCEPT;
    370         CRX_ERROR_SET (aResult, "Failed to accept(%d).", GetSystemErrorCode ());
     426        CRX_ERROR_SET (aResult, "Failed to accept(%d).", CRX_SYSTEM_ERROR ());
    371427        return aResult;
    372428    }
     
    380436    if (aAddressLength != NULL)
    381437        *aAddressLength = aLength;
    382 
    383     /*----------------------------------------------------------------*/
     438    /*----------------------------------------------------------------*/
     439
    384440    return aResult;
    385441}
     
    399455    {
    400456        aResult = ERROR_TCPSOCKET_FAILED_TO_SEND;
    401         CRX_ERROR_SET (aResult, "Failed to send(%d).", GetSystemErrorCode ());
    402         return aResult;
    403     }
    404 
    405     /*----------------------------------------------------------------*/
     457        CRX_ERROR_SET (aResult, "Failed to send(%d).", CRX_SYSTEM_ERROR ());
     458    }
     459    /*----------------------------------------------------------------*/
     460
    406461    return aResult;
    407462}
     
    421476    {
    422477        aResult = ERROR_TCPSOCKET_FAILED_TO_RECEIVE;
    423         CRX_ERROR_SET (aResult, "Failed to receive(%d).", GetSystemErrorCode ());
    424         return aResult;
    425     }
    426 
    427     /*----------------------------------------------------------------*/
    428     return aResult;
    429 }
     478        CRX_ERROR_SET (aResult, "Failed to receive(%d).", CRX_SYSTEM_ERROR ());
     479    }
     480    /*----------------------------------------------------------------*/
     481
     482    return aResult;
     483}
Note: See TracChangeset for help on using the changeset viewer.