Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как узнать жив ли SOCKET до передачи данных? / 25 сообщений из 33, страница 1 из 2
04.02.2003, 16:28
    #32101044
_kyky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
Как узнать жив ли SOCKET до передачи данных?
...
Рейтинг: 0 / 0
06.02.2003, 14:26
    #32102301
Alexxxxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
Понюхать его, если не завонялся - то жив!
А вообще нужно отслеживать его состоянии в процессе работы с ним - там есть куча всяких нотисов!
...
Рейтинг: 0 / 0
06.02.2003, 16:31
    #32102480
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
Тоесть как жив? если сможеш сенд сделать с неотритцательным результатом - значт жив пока. Или тебя чужой сокет интересует?
...
Рейтинг: 0 / 0
11.09.2003, 13:15
    #32262319
Tvorez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
Пошли ему контрольное сообщение, вроде: "Ты как там, жив?"; или любое другое, если он примит его нормально - жив, если нет - увы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.11.2006, 11:46
    #34108586
Lepaj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
А если чужой сокет? Есть какая нибудь возможность узнать жив ли он, не отправляя сообщение? Так как требуется это проверить до того как будут посланы данные.
...
Рейтинг: 0 / 0
07.11.2006, 12:49
    #34108838
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
select'ом на write.
...
Рейтинг: 0 / 0
07.11.2006, 13:41
    #34109024
Lepaj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
WSAAsyncSelect (hListenSockTCP,GetConsoleHWND(),WM_ASYNC_CLIENTEVENT,FD_WRITE);

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

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
07.11.2006, 14:01
    #34109094
Lepaj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
А можно пример этой функции...
...
Рейтинг: 0 / 0
07.11.2006, 14:06
    #34109108
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
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
07.11.2006, 14:13
    #34109126
Lepaj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
Спасибо :)
...
Рейтинг: 0 / 0
09.11.2006, 08:22
    #34114309
Lepaj
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
Реализовал проверку следующим образом :

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
09.11.2006, 12:48
    #34115498
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать жив ли SOCKET до передачи данных?
По всей видимости пустые сообщения - заглушка на стороне отправителя и данные не пересылаются. Это можно проверить сниффером.

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

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

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

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


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