示例#1
0
/*============================================================================
 * Get IP Address and Port Number of the local connection
 *===========================================================================*/
OpcUa_StatusCode OpcUa_P_RawSocket_GetLocalInfo(    OpcUa_RawSocket a_RawSocket,
                                                    OpcUa_UInt32*   a_pIP,
                                                    OpcUa_UInt16*   a_pPort)
{
    int                 apiResult     = 0;
    struct sockaddr_in  sockAddrIn;
    size_t              sockAddrInLen = sizeof(struct sockaddr_in);
    SOCKET              winSocket     = (SOCKET)OPCUA_P_SOCKET_INVALID;

OpcUa_InitializeStatus(OpcUa_Module_Socket, "GetLocalInfo");

    if(a_RawSocket == (OpcUa_RawSocket)OPCUA_P_SOCKET_INVALID)
    {
        return 0;
    }

    winSocket = (SOCKET)a_RawSocket;

    apiResult = getsockname(winSocket, (struct sockaddr*)&sockAddrIn, (int*)&sockAddrInLen);

    if(apiResult != 0)
    {
        apiResult = OpcUa_P_RawSocket_GetLastError(a_RawSocket);
        uStatus = OpcUa_BadCommunicationError;
        goto Error;
    }

    if(a_pIP != OpcUa_Null)
    {
        *a_pIP   = OpcUa_P_RawSocket_NToHL((OpcUa_UInt32)sockAddrIn.sin_addr.s_addr);
    }

    if(a_pPort != OpcUa_Null)
    {
        *a_pPort = OpcUa_P_RawSocket_NToHS((OpcUa_UInt16)sockAddrIn.sin_port);
    }

OpcUa_ReturnStatusCode;
OpcUa_BeginErrorHandling;
OpcUa_FinishErrorHandling;
}
/*============================================================================
 * Network Byte Order Conversion Helper Functions
 *===========================================================================*/
OpcUa_UInt32 OPCUA_DLLCALL OpcUa_P_Socket_NToHL(OpcUa_UInt32 a_netLong)
{
    return OpcUa_P_RawSocket_NToHL(a_netLong);
}