сокеты 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 сервера тоже все работает успешно.
Re: сокеты Windows 7 и CURL
От: ZeBbra  
Дата: 27.02.13 08:05
Оценка:
Здравствуйте, ZeBbra, Вы писали:

Все банально. Microsoft Forefront в домене, видимо, отрубает соединение.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.