Сокет с recv-тайм-аутом: Что не так с этим кодом?

Вместе со всеми комментариями к учетным данным я обнаружил, что базовая аутентификация заблокирована в некоторых репозиториях.

Я считаю, что лучше всего создать Личный токен доступа (PAT) в хранилище. Затем используйте это в своих соединениях для доступа к API.

Пример, чтобы прочитать, какие проекты находятся в коллекции репозитория tfs / devops по умолчанию:

string PAT = "Put PAT String Here";
string RepoStore = "https://url of repo here";
string responseBody = "";

using (HttpClient client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(
        new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(
            System.Text.ASCIIEncoding.ASCII.GetBytes(
                string.Format("{0}:{1}", "", PAT))));

    using (HttpResponseMessage response = client.GetAsync(
                RepoStore + "/_apis/projects").Result)
    {
        response.EnsureSuccessStatusCode();
        responseBody = await response.Content.ReadAsStringAsync();
    }
    Console.WriteLine(responseBody);
}

Console.ReadKey();
10
задан 25 December 2008 в 23:09
поделиться

3 ответа

Вот использование отрывка select:

FD_ZERO(&masterfds);
FD_SET(sockfd,&masterfds);
memcpy(&readfds,&masterfds,sizeof(fd_set));
timeout.tv_sec = 2;
timeout.tv_usec = 0;
if (select(sockfd+1, &readfds, NULL, NULL, &timeout) < 0)
{
    printf("select error");
    exit(1);
}

if (FD_ISSET(sockfd, &readfds))
{
    //printf("Read from socket\n");
    // read from the socket
    res = recvfrom(sockfd, (char *)hdrbuf, sizeof(hdrbuf), MSG_PEEK, recvaddr, address_len);
}
else
{
    // the socket timedout
    //printf("Socket timeout started=%d\n",packets_started);
4
ответ дан 3 December 2019 в 21:23
поделиться

На каком сокете Вы хотите иметь один второй тайм-аут? Соединения принятия или то, установленное, принимают ()?

Я принял бы последнего - так попытайтесь установить получить тайм-аут на clientfd ПОСЛЕ принять возвратов. Можно также добраться туда, где необходимо использовать выбор, но Вы не должны должны быть.

6
ответ дан 3 December 2019 в 21:23
поделиться

Попытайтесь использовать выбор () прежде, чем назвать recv () или примите ().

выберите (), берет массив дескрипторов файлов (includinig сокеты) и возвращается, когда по крайней мере один из них готов получить. Это может также возвратиться на тайм-ауте.

В Linux можно также попробовать опрос () (не уверенный, если Winsock обеспечивает это).

0
ответ дан 3 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: