Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];

Вниз

таймаут сокета   Найти похожие ветки 

 
AllDer   (2007-09-14 11:59) [0]

код работает, но если приложение заблокировано файрволом,то
процедура виснет,хотя явно задал что ждать надо 15 секунд

arg := 15000; //
   if setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,@arg,sizeof(arg))= SOCKET_ERROR then exit;

родная Socket GetLastError говорит 0

дальше recvfrom( неидет


 
Сергей М. ©   (2007-09-14 12:16) [1]

Ты справку вообще читал ?

Что за абракадабру ты здесь понаписал ?


 
umbra ©   (2007-09-14 12:21) [2]

SO_RCVTIMEO не поддерживается в Winsock


 
AllDer   (2007-09-14 12:22) [3]

код не мой , но он рабочий


 
AllDer   (2007-09-14 12:23) [4]

umbra

странно но в исходниках так и написано было
и подключен winsock;


 
Сергей М. ©   (2007-09-14 12:26) [5]

Ты справку читал ?


 
umbra ©   (2007-09-14 12:35) [6]

http://msdn2.microsoft.com/en-us/library/ms740476.aspx


 
AllDer   (2007-09-14 12:35) [7]

да читал

The following socket options are available for Windows 2000, Windows NT 4.0,
and Windows Me/98/95:

SO_SNDTIMEO
SO_RCVTIMEO

Details on SO_SNDTIMEO and SO_RCVTIMEO

These two options set up time-outs for the send, sendto, recv, and recvfrom
functions.
You can obtain the same functionality by calling select with a time-out just
before the
I/O call, but these options offer a significant improvement in performance
by avoiding
a kernel transition and the other overhead of the select call. For any code
whose
performance is very critical, applications should use these time-out options
rather than
select.

DWORD    tout    = 60 * 1000;    //1 минута
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*) &tout, sizeof(tout));

Windows recv вернет -1 а WSAGetLastError — WSAETIMEDOUT, после чего сокет должен быть закрыт


 
Сергей М. ©   (2007-09-14 12:46) [8]


> да читал


Да нифига ты не читал)

Для какого level допустимы эти опции ? Для IPPROTO_TCP !
А ты их для какого пытаешься применить ? SOL_SOCKET !

Далее (цитата из справки):

specific error code can be retrieved by calling WSAGetLastError

А ты что вместо э\того вызываешь ? GetLastError !

И ты продолжишь утверждать, что читал справку ?)


 
AllDer   (2007-09-14 13:14) [9]

Сергей М.

какая у вас справка , у меня D5, а вас )

в пункте 7 был приведен пример с rsdn.ru
(sock, SOL_SOCKET, SO_RCVTIMEO,  так что работало значит)

вызываю именно WSAGetLastError
он равен нулю - писал специально что вызваю родную сокетную ошибку

http://www.yandex.ru/yandsearch?text=SOL_SOCKET%2C+SO_RCVTIMEO&rpt=rad

судя по топикам эта конструкция работает, а у нас нет


 
Zeqfreed ©   (2007-09-14 13:22) [10]

SO_RCVTIMEO int Receives time-out in milliseconds (available in the Microsoft implementation of Windows Sockets 2).

Написано же — winsock2 должен быть.


 
umbra ©   (2007-09-14 13:50) [11]

а как тогда понимать следующее:

BSD options not supported for setsockopt are shown in the following table.

Value                  Type  Meaning
SO_ACCEPTCONN  BOOL  Socket is listening.
SO_RCVLOWAT   int  Receives low watermark.
SO_RCVTIMEO    int  Receives time-out in milliseconds (available in the Microsoft implementation of Windows Sockets 2).
SO_SNDLOWAT  int  Sends low watermark.
SO_SNDTIMEO   int  Sends time-out in milliseconds (available in the Microsoft implementation of Windows Sockets 2).
SO_TYPE      int  Type of the socket.


 
Сергей М. ©   (2007-09-14 13:53) [12]


> какая у вас справка , у меня D5, а вас


Д7.

Она ничем не отличается от Д5, и речь в этих справках идет о Winsock1, поскольку ноги у справки растут еще со времен Win9x/Me, когда Winsoсk2 была еще только в проекте.

И мне непонятно, зачем менять дифолтные значения таймаутов, если для блок.режима есть ф-ция select (работающая на всех платформах всех версий), где значение каки раз и задается таймаута  ..

И чем не угодил неблок.режим - тоже непонятно ..


 
Сергей М. ©   (2007-09-14 13:55) [13]


> umbra ©   (14.09.07 13:50) [11]


Прямо так и понимать - для версии WS 1.x, о которой идет речь в справке, эти опции не поддерживаются.


 
umbra ©   (2007-09-14 13:58) [14]


> для версии WS 1.x, о которой идет речь в справке, эти опции
> не поддерживаются

это цитата с http://msdn2.microsoft.com/en-us/library/ms740476.aspx


 
Сергей М. ©   (2007-09-14 14:10) [15]


> umbra ©   (14.09.07 13:58) [14]


То же самое фигурирует и в справке от D5..D7


 
AllDer   (2007-09-14 19:22) [16]

стало быть выход загнать это в поток и
если зависло на время больше чем 15 сек
делать TerminateThread ?


 
Zeqfreed ©   (2007-09-14 19:37) [17]

> AllDer   (14.09.07 19:22) [16]

Лучше запускать под VMWare в FreeBSD, где поддерживается таймаут. Ага.

Hint: есть сис. вызов select (о чем, кстати, и в справке написано).


 
Сергей М. ©   (2007-09-16 12:09) [18]


> AllDer   (14.09.07 19:22) [16]


> выход загнать это в поток


Не вижу в этом никакой необходимости.


> делать TerminateThread


И тем более плохое решение - терминировать поток без необходимости.

Либо select() либо неблок.режим спасут отца русской демократии)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
15-1190004777
naumovmag
2007-09-17 08:52
2007.10.14
Работа с COM портами


2-1190044966
ANTPro
2007-09-17 20:02
2007.10.14
procedure RotateX


15-1190017546
GeLLeR
2007-09-17 12:25
2007.10.14
Гитара


2-1189763049
Lebedev
2007-09-14 13:44
2007.10.14
MMSYSTEM281 в ОС WIN98, с прогой Delphi (MediaPlayer).


2-1189617829
Kley
2007-09-12 21:23
2007.10.14
Чистка БД от задвоек





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский