Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 19

Изменить время выслушивания Сокета сервера

16.01.2021, 16:24. Показов 5534. Ответов 10

Студворк — интернет-сервис помощи студентам
После компиляции проект закрывается после 10 сек выслушивания.
Вопрос: Как изменить время и что я делаю неправильно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
res = ioctlsocket(s, FIONBIO, &nb);        // Неблокирующий режим сокета; nb = 1
    if (res == SOCKET_ERROR)                   // Ошибок нет
    {
        std::cout << "Error to set to non block" << std::endl;
        return -1;
    }
 
    res = bind(s, (sockaddr*)&sa, sizeof(sa));  // Ошибок нет
    if (res == INVALID_SOCKET)
    {
        std::cout << "BIND == INVALID" << std::endl;
        return -1;
    }
 
    res = listen(s, 100);                            // Ошибок нет
    if (res == INVALID_SOCKET)  
    {
        std::cout << "Listen == INVALID" << std::endl;
        return -1;
    }         
 
    
    struct timeval tv;
    tv.tv_sec = 5;
    tv.tv_usec = 0;
 
    while (1)
    {
                //fd_set fr, fw, fe;
 
        FD_ZERO(&fr);
        FD_ZERO(&fw);
        FD_ZERO(&fe);
 
        FD_SET(s, &fr);
        FD_SET(s, &fe);
 
        std::cout << "select start  " << std::endl;
 
        res = select(s + 1, &fr, &fw, &fe, &tv);
        if (res > 0)
        {
            std::cout << "Connect " << fr.fd_count << std::endl;
            // accept
        }
        else if (res == 0)                                         
        {
            std::cout << "NO Connect " << fr.fd_count << std::endl;   //<<<<всегда здесь
        }
        else
        {
            std::cout << "Error select " << fr.fd_count << std::endl;
            res = GetLastError();
            std::cout << res << std::endl;
 
        }
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2021, 16:24
Ответы с готовыми решениями:

Считывание ответа сервера из сокета
Всем добрый вечер! Недавно начал работать с сокетами и почти сразу столкнулся с проблемой - не могу считать ответ сервера. Функция recv()...

Определить отключение сокета от сервера
Нашёл пару тем на форуме но не понял как сделать :) Там написано что при нормальном отключение сервер шлёт сообщение длиной 0 байт, но как...

Какому закону распределения подчиняется время отклика сервера и среднее время отклика сервера
Доброго времени суток! Подскажите, какому закону распределения подчиняется время отклика сервера и среднее время отклика сервера (если...

10
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.01.2021, 17:04
Цитата Сообщение от TonySem Посмотреть сообщение
Вопрос: Как изменить время и что я делаю неправильно?
Попробуй воспользоваться setsockopt(SO_RCVTIMEO)
https://docs.microsoft.com/en-... setsockopt
А вообще, лучше такие вещи делать при помощи select
1
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 19
16.01.2021, 17:08  [ТС]
select есть
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.01.2021, 17:20
Цитата Сообщение от TonySem Посмотреть сообщение
select есть
А, ну да, невнимательно смотрел.
Тогда вроде всё правильно. Что значит "проект закрывается после 10 сек выслушивания", в чём это выражается? Покажи весь код.

Добавлено через 2 минуты
Цитата Сообщение от TonySem Посмотреть сообщение
FD_ZERO(&fr);
        FD_ZERO(&fw);
        FD_ZERO(&fe);
FD_SET(s, &fr);
        FD_SET(s, &fe);
если ты не используешь fw, то лучше сделать
Цитата Сообщение от TonySem Посмотреть сообщение
res = select(s + 1, &fr, nullptr, &fe, &tv);
Добавлено через 2 минуты
Добавление нескольких клиентов в TCP сервере winsock
0
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 19
16.01.2021, 17:27  [ТС]
10 сек прослушивания от listen, после заканчивает работу (return 0 без cout<<"exit")

select start
NO Connect 0
select start

D:\VisualStudio_Proj\С++\ND44\Debug\ND44 .exe (процесс 2148) завершил работу с кодом 0.
Нажмите любую клавишу, чтобы закрыть это окно…


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>
#include <iostream>
 
#pragma warning(disable:4996)    
 
u_long nb = 1;        // режим сокета
int res = 0;          // результат ошибок
fd_set fr, fw, fe;
 
int main()
{
    WSAData wsaData;
    WORD DLLVersion = MAKEWORD(2, 2);
    if (WSAStartup(DLLVersion, &wsaData) != 0)       // Ошибок нет
    { 
        std::cout << "Error" << std::endl;
        return 1;
    }
 
    SOCKET s = socket(AF_INET, SOCK_STREAM, NULL);
    SOCKADDR_IN sa;
    memset(&sa, 0, sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_port = htons(1334);
 
    res = ioctlsocket(s, FIONBIO, &nb);        // Неблокирующий режим сокета
    if (res != 0)
    {
        std::cout << "Error to set to non block" << std::endl;
        return -1;
    }
 
    res = bind(s, (sockaddr*)&sa, sizeof(sa));  // Ошибок нет
    if (res == INVALID_SOCKET)
    {
        std::cout << "BIND == INVALID" << std::endl;
        return -1;
    }
 
    res = listen(s, 100);                      // Ошибок нет
    if (res == INVALID_SOCKET)
    {
        std::cout << "Listen == INVALID" << std::endl;
        return -1;
    }         
 
    
    struct timeval tv;
    tv.tv_sec = 5;
    tv.tv_usec = 0;
 
    while (1)
    {
        FD_ZERO(&fr);
        FD_ZERO(&fw);
        FD_ZERO(&fe);
 
        FD_SET(s, &fr);
        FD_SET(s, &fe);
 
        std::cout << "select start  " << std::endl;
 
        res = select(s + 1, &fr, &fw, &fe, &tv);
        if (res > 0)
        {
            std::cout << "Connect " << fr.fd_count << std::endl;
            // accept
        }
        else if (res == 0)
        {
            std::cout << "NO Connect " << fr.fd_count << std::endl;
        }
        else
        {
            std::cout << "Error select " << fr.fd_count << std::endl;
            res = GetLastError();
            std::cout << res << std::endl;
 
        }
    }
    std::cout << " exit" << std::endl;
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.01.2021, 17:32
Цитата Сообщение от TonySem Посмотреть сообщение
D:\VisualStudio_Proj\С++\ND44\Debug\ND44 .exe (процесс 2148) завершил работу с кодом 0.
Нажмите любую клавишу, чтобы закрыть это окно…
Запустил - крутится в цикле - select start - No connect, не выходит. Собственно так по коду и есть. Ты точно тот код показал?
0
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 19
16.01.2021, 17:48  [ТС]
Копирую скинутый мною код, результат тот же,Visual Studio 2019 16.7.6 но думаю дело не в обновлениях.
У вас он точно больше 10 сек проработал?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.01.2021, 17:50
Лучший ответ Сообщение было отмечено TonySem как решение

Решение

Цитата Сообщение от TonySem Посмотреть сообщение
У вас он точно больше 10 сек проработал?
Да, точно.
0
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 19
16.01.2021, 18:40  [ТС]
Благодарен за информацию !

Добавлено через 47 минут
Еще раз спасибо, на другом компе, на удивление, все заработало.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
16.01.2021, 18:52
Лучший ответ Сообщение было отмечено TonySem как решение

Решение

Цитата Сообщение от TonySem Посмотреть сообщение
Еще раз спасибо, на другом компе, на удивление, все заработало.
Не очень понятно, почему на твоём отваливается. Может кто-то тупо срубает процесс?
1
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 19
17.01.2021, 22:04  [ТС]
не понял, что значит кто-то срубает процесс?

Добавлено через 5 минут
Хороший вопрос, антивирус выключил и сработало, странно что я сам себе этот вопрос не задал)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2021, 22:04
Помогаю со студенческими работами здесь

Работа с сокетами. Создание сокета сервера
Проверьте, пожалуйста программу (она еще не дописана до конца), выскажите замечания. #include &lt;stdlib.h&gt; #include...

Опции сокета на стороне клиента и сервера
Добрый день. Имеется сервер на C#, и j2me-клиенты, подключающиеся к этому серверу (пока тестируется 10-12 клиентов, но в планах будет...

Как получить IP-адрес сервера из его сокета?
Всем добрый день. Помогите, пожалуйста, разобраться. Есть клиент серверное приложение на сокетах. Серверная часть: ...

Использование сокета в качестве сервера или клиента по ситуации
В большинстве клиент-серверных приложений сначала запускают сервер , затем клиентов. Но захотелось автоматизации , те автоматического...

Повторное подключение сокета вызывает некорректное поведение веб-сервера
Есть два py скрипта (python 2.7), которые запускаются на linux машине (.service): 1) Процесс П, который обрабатывает некие данные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru