Всем доброго дня!
Есть простейшее приложение, которое делает простой коннект, например, к 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 сервера тоже все работает успешно.