powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать жив ли SOCKET до передачи данных?
8 сообщений из 33, страница 2 из 2
Как узнать жив ли SOCKET до передачи данных?
    #34115703
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepajПопробовал с проверкой и без... В errno в обоих случаях возвращает ноль .

При соединии и разрыве?
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34115910
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем у меня вот такая структура :

Код: plaintext
1.
2.
Server <-----> Proxy <------ Client
       1     1       1     M

Прокся конектится к серверу один раз при запуске программы, а в дальнейшем требуется проводить проверку, жив ли сокет у сервера, для этого на проксе при передачи клиентом сообщения я и отсылаю эти сообщения:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  Errors_sock = send(serv_sock, "", 0, 1);
    if(Errors_sock == -1)
     {
         printf("Error SERVER Socket!!!!!!!!!!!!!!\n");
         system("PAUSE");
         break;
     }
        else
     {
        ...
     }

У сервера организован прием сообщений, через recv:

Код: plaintext
1.
2.
3.
4.
5.
  rec = recv(cli_disc, buf, sizeof(buf), 0);
  if(rec>0) 
     {
         ...
     }

Так, вот в случае, если прокся не передает данные, то recv возращает -1, в обратном случае длину сообщения.
Я проверил какая ошибка заносится в errno, с организацией проверки отправкой пустого сообщения, и без оной... В обоих случаях код ошибки был равен нулю. Т.е. как я понял ошибки как таковой не возникало.

В случае, если закрыть программу сервера, проверка на проксе при отправке пустого сообщения будет возращать -1, т.е. это можно использовать, как флаг, что у сервера, что то не в порядке.

Вот я и думаю, что наверное, такую проверку, жив ли сокет можно использовать :) (Надеюсь, объяснил понятно :) )

Хотя может, я что и напутал по неопытности.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34116039
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное можно
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34116165
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LepajЕсть какая нибудь возможность узнать жив ли он, не отправляя сообщение? Так как требуется это проверить до того как будут посланы данные.Ой, а он может помереть сразу после этой вашей проверки и до того как будут посланы данные. Зачем вам отдельная проверка ? Смотрите ра результат возвращаемый при попытке отправки данных.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34116181
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone LepajЕсть какая нибудь возможность узнать жив ли он, не отправляя сообщение? Так как требуется это проверить до того как будут посланы данные.Ой, а он может помереть сразу после этой вашей проверки и до того как будут посланы данные. Зачем вам отдельная проверка ? Смотрите ра результат возвращаемый при попытке отправки данных.

Бывает нужна реакция на отвал сокета.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34116299
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneОй, а он может помереть сразу после этой вашей проверки и до того как будут посланы данные. Зачем вам отдельная проверка ? Смотрите ра результат возвращаемый при попытке отправки данных.

Я не спорю, но Akh прав, тут как раз такая ситуация, нужно проверить не овалился ли сервер, если он отвалился, то не принимать соединения от клиентов. А если смотреть по отсылаемым данным, то клиент будет уверен, что отослал данные.

Если реализовывать такой вариант, то в случае неудачной отправки нужно как то известить клиента, ведь он уже отослал данные, что усложнит программу и потребует обработку клиентом сообщений присылаемой проксей.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34116432
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если соединение с сервером порвалось, после получения данных от клиента?
А если внутренняя ошибка на прокси произойдет?
Клиент не может быть уверен, что данные, которые он отправил дошли до сервера, тем более, что они обработаны сервером.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34116499
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhА если соединение с сервером порвалось, после получения данных от клиента?
А если внутренняя ошибка на прокси произойдет?
Клиент не может быть уверен, что данные, которые он отправил дошли до сервера, тем более, что они обработаны сервером.

Конечно не может :D, но так хоть частично можно обезопаситься :) А вообще над этой задачей нужно думать. Вот например, сейчас надо будет сделать защиту от переполнения буфера :) Да и вообще может произойти, что угодно. Я только неделю с сетью и Си работаю :)
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать жив ли SOCKET до передачи данных?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]