
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
04.02.2003, 16:28
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Как узнать жив ли SOCKET до передачи данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.02.2003, 14:26
|
|||
|---|---|---|---|
|
|||
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Понюхать его, если не завонялся - то жив! А вообще нужно отслеживать его состоянии в процессе работы с ним - там есть куча всяких нотисов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.02.2003, 16:31
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Тоесть как жив? если сможеш сенд сделать с неотритцательным результатом - значт жив пока. Или тебя чужой сокет интересует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.09.2003, 13:15
|
|||
|---|---|---|---|
|
|||
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Пошли ему контрольное сообщение, вроде: "Ты как там, жив?"; или любое другое, если он примит его нормально - жив, если нет - увы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2006, 11:46
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
А если чужой сокет? Есть какая нибудь возможность узнать жив ли он, не отправляя сообщение? Так как требуется это проверить до того как будут посланы данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2006, 12:49
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
select'ом на write. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2006, 13:41
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
WSAAsyncSelect (hListenSockTCP,GetConsoleHWND(),WM_ASYNC_CLIENTEVENT,FD_WRITE); Так? И какое значение должен вернуть селект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2006, 13:47
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Я имел ввиду: 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 ); Ну, а по режимам, смотреть аналогичные функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2006, 14:01
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
А можно пример этой функции... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2006, 14:06
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
LepajА можно пример этой функции... Что нибудь типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. будет ждать 100мкс возможности записать в сокет. Но лучше ставь на read, т.к. опыт под линухами с трубами показал, что при проверке на write может и зависнуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.11.2006, 14:13
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 08:22
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Реализовал проверку следующим образом : Errors_sock = send(serv_sock, "", 0, 1); if(Errors_sock == -1) { ... } else { ... } Работает нормально, в случае если serv_sock отваливается, программа завершается. У меня возник вопрос, будет ли такая проверка правильно или же искать какой нибудь другой вариант обработки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 09:55
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
LepajРаботает нормально, в случае если serv_sock отваливается, программа завершается. У меня возник вопрос, будет ли такая проверка правильно или же искать какой нибудь другой вариант обработки? В принципе - можно. Примерно так я и поступаю, для определения наличия коннекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 10:13
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
AkhВ принципе - можно. Примерно так я и поступаю, для определения наличия коннекта. Меня смущает, что отправляются сообщения на сервер, хоть они и пустые... Я написал сервер, он эти сообщения не видет, а, например, если я буду так проверять другие работу сокетов на других серверах, будут ли обрабатыватся посылаемые мной сообщения? Синтаксиз Errors_sock = send(serv_sock, "", 0, 1); serv_sock - понятно "" - пустое сообщение 0 - ноль посылаемых символов в сообщении а вот с флагом 1 - не понятно, как по русски то понять, что он делает? Так как в документации написано, что если флаг установлен в 0, то функция аналогична системному вызову write, а если он не ноль, то ничего не сказано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 10:26
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Lepaj AkhВ принципе - можно. Примерно так я и поступаю, для определения наличия коннекта. Меня смущает, что отправляются сообщения на сервер, хоть они и пустые... Честно сказать, ничего не понял. ;) На счет флага - 1 это нонсес. Почитай справку. В линуксе у send'а 5 флагов, которые можно совмещать операцией или. Возможно 1 - это MSG_DONTWAIT. Возможно нет (влом лезть в хеадеры). Посмотри, что устанавливается в errno в случае ошибки. Делай от сюда выводы. Линуксовая справка . Если будут вопросы - задавай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 10:39
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Вот выдрал из Winsock2.h #define MSG_OOB 1 #define MSG_PEEK 2 #define MSG_DONTROUTE 4 #define MSG_MAXIOVLEN 16 #define MSG_PARTIAL 0x8000 Как я понял Линуксовым соответствуют только два флага... Чтож буду осмысливать информацию и пытатся применить ее к форточкам :) Спасибо за сведенья ;) Думаю вопросы еще появятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 10:41
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Вот как раз один созрел : "Посылает внепотоковые данные, если сокет это поддерживает (как, например, сокеты типа SOCK_STREAM); протокол более низкого уровня также должен поддерживать внепотоковые данные." Т.е. данные, которые не будут вносится в поток принимающего сокета? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 10:46
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
LepajВот как раз один созрел : "Посылает внепотоковые данные, если сокет это поддерживает (как, например, сокеты типа SOCK_STREAM); протокол более низкого уровня также должен поддерживать внепотоковые данные." Т.е. данные, которые не будут вносится в поток принимающего сокета? http://coldflame.by.ru/bgnet/bgnet/recvman.shtml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 11:00
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Понял :) В случае, если в прослушиаеющем recv сокете не определен флаг MSG_OOB, то данные паета не будут приняты, но и код ошибкb -1 не будет отослан :) Так что получается, что для проверки жив ли сокет, такая проверка подходит. Akh спасибо за информацию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 11:19
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
LepajТак что получается, что для проверки жив ли сокет, такая проверка подходит. С такими общими моментами не заморачивался, так что тут стоит серьезений поразбираться. Может стоти пробовать читать с сокета и проверять ошибки ECONNREFUSED или ENOTCONN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 12:34
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Попробовал вот такую схему : 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, т.е. ошибку при передачи. Блин, извините ща путанность изложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 12:48
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
По всей видимости пустые сообщения - заглушка на стороне отправителя и данные не пересылаются. Это можно проверить сниффером. Пробовал проверять на разрыв коннекта по ECONNREFUSED или ENOTCONN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 12:53
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
AkhПробовал проверять на разрыв коннекта по ECONNREFUSED или ENOTCONN? Нет, не пробывал. А где есть описание данных функций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 13:02
|
|||
|---|---|---|---|
Как узнать жив ли SOCKET до передачи данных? |
|||
|
#18+
Lepaj AkhПробовал проверять на разрыв коннекта по ECONNREFUSED или ENOTCONN? Нет, не пробывал. А где есть описание данных функций? Когда делаешь recv и результат -1, то в errno заносится данное значение. Надо смотреть в описание recv ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2030078]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 449ms |

| 0 / 0 |
