powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать жив ли SOCKET до передачи данных?
25 сообщений из 33, страница 1 из 2
Как узнать жив ли SOCKET до передачи данных?
    #32101044
_kyky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как узнать жив ли SOCKET до передачи данных?
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #32102301
Alexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понюхать его, если не завонялся - то жив!
А вообще нужно отслеживать его состоянии в процессе работы с ним - там есть куча всяких нотисов!
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #32102480
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоесть как жив? если сможеш сенд сделать с неотритцательным результатом - значт жив пока. Или тебя чужой сокет интересует?
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #32262319
Tvorez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пошли ему контрольное сообщение, вроде: "Ты как там, жив?"; или любое другое, если он примит его нормально - жив, если нет - увы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как узнать жив ли SOCKET до передачи данных?
    #34108586
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если чужой сокет? Есть какая нибудь возможность узнать жив ли он, не отправляя сообщение? Так как требуется это проверить до того как будут посланы данные.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34108838
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select'ом на write.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34109024
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WSAAsyncSelect (hListenSockTCP,GetConsoleHWND(),WM_ASYNC_CLIENTEVENT,FD_WRITE);

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

The Windows Sockets select function
int select (
int nfds,
fd_set FAR * readfds,
fd_set FAR * writefds,
fd_set FAR * exceptfds,
const struct timeval FAR * timeout
);


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


Что нибудь типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
struct fdset fs;
struct tin\meval tv;

FD_ZERO(&fs);
FD_SET(&fs, hHandle);

tv.tv_sec= 0 ;
tv.tv_usec= 100 ;

int ret=select(hHandle+ 1 , NULL, &fs, NULL, &tv);
if (ret== 1 )
   //все будет хорошо :)

будет ждать 100мкс возможности записать в сокет.

Но лучше ставь на read, т.к. опыт под линухами с трубами показал, что при проверке на write может и зависнуть.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34109126
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо :)
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34114309
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовал проверку следующим образом :

Errors_sock = send(serv_sock, "", 0, 1);
if(Errors_sock == -1)
{
...
}
else
{
...
}

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

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

Меня смущает, что отправляются сообщения на сервер, хоть они и пустые...
Я написал сервер, он эти сообщения не видет, а, например, если я буду так проверять другие работу сокетов на других серверах, будут ли обрабатыватся посылаемые мной сообщения?

Синтаксиз Errors_sock = send(serv_sock, "", 0, 1);

serv_sock - понятно
"" - пустое сообщение
0 - ноль посылаемых символов в сообщении
а вот с флагом 1 - не понятно, как по русски то понять, что он делает? Так как в документации написано, что если флаг установлен в 0, то функция аналогична системному вызову write, а если он не ноль, то ничего не сказано.
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34114648
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepaj AkhВ принципе - можно. Примерно так я и поступаю, для определения наличия коннекта.

Меня смущает, что отправляются сообщения на сервер, хоть они и пустые...

Честно сказать, ничего не понял. ;) На счет флага - 1 это нонсес. Почитай справку. В линуксе у send'а 5 флагов, которые можно совмещать операцией или. Возможно 1 - это MSG_DONTWAIT. Возможно нет (влом лезть в хеадеры).
Посмотри, что устанавливается в errno в случае ошибки. Делай от сюда выводы.

Линуксовая справка .

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

#define MSG_OOB 1
#define MSG_PEEK 2
#define MSG_DONTROUTE 4
#define MSG_MAXIOVLEN 16
#define MSG_PARTIAL 0x8000

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

"Посылает внепотоковые данные, если сокет это поддерживает (как, например, сокеты типа SOCK_STREAM); протокол более низкого уровня также должен поддерживать внепотоковые данные."

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

"Посылает внепотоковые данные, если сокет это поддерживает (как, например, сокеты типа SOCK_STREAM); протокол более низкого уровня также должен поддерживать внепотоковые данные."

Т.е. данные, которые не будут вносится в поток принимающего сокета?

http://coldflame.by.ru/bgnet/bgnet/recvman.shtml
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34114864
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял :) В случае, если в прослушиаеющем recv сокете не определен флаг MSG_OOB, то данные паета не будут приняты, но и код ошибкb -1 не будет отослан :)

Так что получается, что для проверки жив ли сокет, такая проверка подходит.

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

С такими общими моментами не заморачивался, так что тут стоит серьезений поразбираться.

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

do
{
rec=recv(clientsock, str, sizeof(str), 0);
dl=rec;
if(rec>=0)
{
printf("Size : \n %d", dl, "\n");
printf("\nRecieved : \n");
for(i=0; i<dl; i++)
{
printf("%c", str );
}
printf("\n");
}
else
{
printf("%d", rec);
}
}
while("EXIT");

recv
возращает -1 , в случае если нет присылаемых данных... В общем в ходе эксперементов удалось установить, что recv не реагирует на
Errors_sock = send(serv_sock, "", 0, 1); и возращает -1 в любом случае.

Есть подозрение, что recv просто отбрасывает заведомо пустые сообщения, обрабатывая их как ошибку, т.е. -1 , но на стороне клиента соединение проходит нормально send не возращает -1, т.е. ошибку при передачи.

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

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

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

Нет, не пробывал. А где есть описание данных функций?

Когда делаешь recv и результат -1, то в errno заносится данное значение.
Надо смотреть в описание recv
...
Рейтинг: 0 / 0
Как узнать жив ли SOCKET до передачи данных?
    #34115691
Lepaj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал с проверкой и без... В errno в обоих случаях возвращает ноль .
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать жив ли SOCKET до передачи данных?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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