Форум: "Начинающим";
Текущий архив: 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.48 MB
Время: 0.039 c