TPM_SOCKET_HANDLE tpm_socket_create()

in src/tpm_socket_comm.c [199:239]


TPM_SOCKET_HANDLE tpm_socket_create(const char* address, unsigned short port)
{
    TPM_SOCKET_INFO* result;
    if ((result = malloc(sizeof(TPM_SOCKET_INFO))) == NULL)
    {
        LogError("Failure: malloc socket communication info.");
    }
    else
    {
#ifdef WIN32
        WSADATA wsaData;
        WSAStartup(MAKEWORD(2, 0), &wsaData);
#endif

        memset(result, 0, sizeof(TPM_SOCKET_INFO));

        if ((result->socket_conn = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
        {
            LogError("Failure: connecting to tpm simulator.");
            free(result);
            result = NULL;
        }
        else
        {
            struct sockaddr_in SockAddr;
            memset(&SockAddr, 0, sizeof(SockAddr));
            SockAddr.sin_family = AF_INET;
            SockAddr.sin_port = htons(port);
            SockAddr.sin_addr.s_addr = inet_addr(address);

            if (connect(result->socket_conn, (struct sockaddr*)&SockAddr, sizeof(SockAddr)) < 0)
            {
                LogError("Failure: connecting to tpm simulator.");
                close_socket(result->socket_conn);
                free(result);
                result = NULL;
            }
        }
    }
    return result;
}