сокеты Windows 7 и CURL
От: ZeBbra  
Дата: 27.02.13 06:57
Оценка:
Всем доброго дня!

Есть простейшее приложение, которое делает простой коннект, например, к Yandex.ru.
Замечено, что от текущего пользователя все хорошо (доменного).
Если же я запускаю тест от локального админа (другого пользователя), то connect не проходит.
Ошибка 10050 (WSAENETDOWN).

Есть какие то подводные камни?
Фаервол виндовый пробовал отключать.

int test()
{
    WSADATA wsaData; int nError ;
    struct addrinfo hints = {0};
    struct addrinfo *aihead;

    nError = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (NO_ERROR != nError)
    {
        nError = WSAGetLastError();
        printf("WSAStartup error: %d", nError);
        return nError; //error
    }

    hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP;
    nError = getaddrinfo("www.yandex.ru", "http", &hints, &aihead);
    if(nError)
        return nError;
    
    SOCKET sock;
    for (struct addrinfo* res=aihead; res!=NULL; res=res->ai_next) 
    {
        sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
        if (INVALID_SOCKET == sock) 
            continue;

        if (connect(sock, res->ai_addr, res->ai_addrlen) != 0) 
        {
            int nError = WSAGetLastError();
            int err = 0;
            int errSize = sizeof(err);
            if(0 != getsockopt(sock, SOL_SOCKET, SO_ERROR, (char *)&err, &errSize))
                printf("get socket error failed. Call WSAGetLastError: %d \r\n", nError);
            else
            {
                if (err != 0)
                    printf("socket error %d \r\n", err);
                else
                    printf("socket error is 0. Call WSAGetLastError: %d \r\n", nError);
            }

            //closesocket(sock);
            continue;
        }

        printf("connected \r\n");
        closesocket(sock);
        continue;
    }

    WSACleanup();
    return 0;
}


Вообще этот тест меня побудила написать библиотека CURL.
Есть служба, которая опрашивает http хосты. Используется CURL.
При работе в качестве службы, Curl_http_readwrite_headers возвращает в прочитанных данных ошибку 403.
При этом некоторые сайты 403, а с некоторыми, все хорошо.
И при этом из под пользователя админа все работает как надо. Из под 2003 сервера тоже все работает успешно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.