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

start [/forum/topic.php?fid=57&msg=34114864&tid=2030078]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
169ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 510ms |

| 0 / 0 |
