|
|
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Собстна, сабж. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 15:41 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
А зачем? Я не просто так спрашиваю - может мне тоже поможет такой тайм-аут, если у нас проблемы схожие? Есть подозрение, что клиент уже получил подтверждение на коннект и шлёт запрос, а сервер ещё не все свои серверные дела сделал, чтобы этот запрос обработать. Ну типа поток в многопоточности получил команду start, а физически ещё не успел стартовать по нормальному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 15:54 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:01 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Наиболее распостраненный метод организации таймаута при соединении к хосту реализуется через создание неблокирующего сокета и ожидании с помощью вызова select или poll. Есть еще способ с установкой alarm и обработкой сигнала от него, но этот вариант сложнее в реализации в связи с некоторыми проблемами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:05 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Lexogen: Ну, селект, понятно. Спасибо. Это я тоже нашел. Есть общесистемный таймаут, у ASP10-ки он, допустим, есть 3 минуты. Меня интересовало, есть ли таймаут для конкретного сокета? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:14 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
ZmeisheА зачем? Я не просто так спрашиваю - может мне тоже поможет такой тайм-аут, если у нас проблемы схожие? Есть подозрение, что клиент уже получил подтверждение на коннект и шлёт запрос, а сервер ещё не все свои серверные дела сделал, чтобы этот запрос обработать. Ну типа поток в многопоточности получил команду start, а физически ещё не успел стартовать по нормальному. Ну, во первых, в любом случае есть таймаут, например общесистемный. Допустим ты его заходишь изменить для своего сокета, ну, для удобства, например. А во вторых, допустим такая ситуация: Есть объект, который является клиентом, он может быть сконнекчен, а может нет. Этот объект, есстественно, может отсылать данные. Для того, чтобы отослать данные, ему надо проверить, а сконнекчен ли он. Это свойство меняется когда производиться попытка коннекта. Логично это все дело замьютексить, и получается, что при попытки отсылки данных, если коннекта нет, то поток отсылающий данные будет заблокирован пока не отвалится таймаут попытки коннекта. Или допустим мы не данные хотим отправлять, а убиваем программу. join()-им все потоки, и поток который пытается сконнектится будет нас держать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:22 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
AkhGluk (Kazan), Lexogen: Ну, селект, понятно. Спасибо. Это я тоже нашел. Есть общесистемный таймаут, у ASP10-ки он, допустим, есть 3 минуты. Меня интересовало, есть ли таймаут для конкретного сокета? Гмм, а зачем ? select - куда уж гибче ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:31 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
AkhЕсть объект, который является клиентом, ... С клиентом понял. У меня серверные непонятки. Буду дальше грызть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:32 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
AkhА во вторых, допустим такая ситуация: Есть объект, который является клиентом, он может быть сконнекчен, а может нет. Этот объект, есстественно, может отсылать данные. Для того, чтобы отослать данные, ему надо проверить, а сконнекчен ли он. Это свойство меняется когда производиться попытка коннекта. Логично это все дело замьютексить, и получается, что при попытки отсылки данных, если коннекта нет, то поток отсылающий данные будет заблокирован пока не отвалится таймаут попытки коннекта. Что правда сокет без лишних телодвижений тупо пытается законнектится 3 минуты ??? у меня была необходимость увеличивать таймаут, а не уменьшать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:34 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Zmeishe AkhЕсть объект, который является клиентом, ... С клиентом понял. У меня серверные непонятки. Буду дальше грызть. По моему вы излишне усложняете себе жизнь. Можете описать конкретную проблему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:36 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) AkhGluk (Kazan), Lexogen: Ну, селект, понятно. Спасибо. Это я тоже нашел. Есть общесистемный таймаут, у ASP10-ки он, допустим, есть 3 минуты. Меня интересовало, есть ли таймаут для конкретного сокета? Гмм, а зачем ? select - куда уж гибче ??? Да, я не против селекта. Я, опцию выставил бы и все. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:38 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) AkhА во вторых, допустим такая ситуация: Есть объект, который является клиентом, он может быть сконнекчен, а может нет. Этот объект, есстественно, может отсылать данные. Для того, чтобы отослать данные, ему надо проверить, а сконнекчен ли он. Это свойство меняется когда производиться попытка коннекта. Логично это все дело замьютексить, и получается, что при попытки отсылки данных, если коннекта нет, то поток отсылающий данные будет заблокирован пока не отвалится таймаут попытки коннекта. Что правда сокет без лишних телодвижений тупо пытается законнектится 3 минуты ??? у меня была необходимость увеличивать таймаут, а не уменьшать :) Да, блин. Причем по невыясненым обстаятельствам, временами сразу отваливается, времени висит. Было бы желание/время, разобрался бы. Может зависит от удаленной стороны выключена/включена/файервол.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:41 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Akh Да, блин. Причем по невыясненым обстаятельствам, временами сразу отваливается, времени висит. Было бы желание/время, разобрался бы. Может зависит от удаленной стороны выключена/включена/файервол.... А трафик уже сниферился? При похожих проблемах использовал tcpdump на серверной и клиентской стороне. Было видно на какой стадии зависло установление соединения (ASK,SYN...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:47 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Lexogen Akh Да, блин. Причем по невыясненым обстаятельствам, временами сразу отваливается, времени висит. Было бы желание/время, разобрался бы. Может зависит от удаленной стороны выключена/включена/файервол.... А трафик уже сниферился? При похожих проблемах использовал tcpdump на серверной и клиентской стороне. Было видно на какой стадии зависло установление соединения (ASK,SYN...). +1 может висеть на не до конца установленном соединении tcpdump обязательно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:50 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
AkhЛогично это все дело замьютексить, и получается, что при попытки отсылки данных, если коннекта нет, то поток отсылающий данные будет заблокирован пока не отвалится таймаут попытки коннекта. А не лучше ли было сделать массив переменных, в которых содержится статус соединения (connected,disconnected,inconnect) и уже доступ к ним синхронизировать? Akh Или допустим мы не данные хотим отправлять, а убиваем программу. join()-им все потоки, и поток который пытается сконнектится будет нас держать. В потоке сделать обработчик сигнала, который прервет выполнения вызова connect и корректно завершит поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:51 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Lexogen AkhЛогично это все дело замьютексить, и получается, что при попытки отсылки данных, если коннекта нет, то поток отсылающий данные будет заблокирован пока не отвалится таймаут попытки коннекта. А не лучше ли было сделать массив переменных, в которых содержится статус соединения (connected,disconnected,inconnect) и уже доступ к ним синхронизировать? Akh Или допустим мы не данные хотим отправлять, а убиваем программу. join()-им все потоки, и поток который пытается сконнектится будет нас держать. В потоке сделать обработчик сигнала, который прервет выполнения вызова connect и корректно завершит поток. 1. Первый поток обращается к массиву, и там все гуд. Второй поток в это время видит, что соединению капут и удаляет объект соединения. Первый поток вылетает в sigmentation fail. 2. Как прервет? ПС: Я не говорю, что нет других методов решений, случаи то разные бывают. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:57 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Lexogen Akh Да, блин. Причем по невыясненым обстаятельствам, временами сразу отваливается, времени висит. Было бы желание/время, разобрался бы. Может зависит от удаленной стороны выключена/включена/файервол.... А трафик уже сниферился? При похожих проблемах использовал tcpdump на серверной и клиентской стороне. Было видно на какой стадии зависло установление соединения (ASK,SYN...). Не снифирился. Возникла проблема, определился, что в виснет connect(), начал искать решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 16:59 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) По моему вы излишне усложняете себе жизнь. Можете описать конкретную проблему ? Могу. Тока другой топик открою, чтобы из этого месиво не устраивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 17:00 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Akh 1. Первый поток обращается к массиву, и там все гуд. Второй поток в это время видит, что соединению капут и удаляет объект соединения. Первый поток вылетает в sigmentation fail. Первый поток блокирует мьютекс и читает статус соединения, разблокирует. Второй ждет освобождения мьютекса, захватывает и устанавливает статус соединения в disconnected, освобождает мьютекс. Можна поточнее сказать когда sigmentation fail ? Akh 2. Как прервет? Если установлен обработчик сигнала, то при поступлении оного вызывается соответсвующий обработчик с прерыванием выполнения любых блокирующих функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 17:04 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
таймаут точно можно установить. (сам устанаваливал давно) скорее в параметрах сокета (setsockopt чтоле) аффтопитезь: объект либо именован, либо не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 17:17 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Lexogen Akh 1. Первый поток обращается к массиву, и там все гуд. Второй поток в это время видит, что соединению капут и удаляет объект соединения. Первый поток вылетает в sigmentation fail. Первый поток блокирует мьютекс и читает статус соединения, разблокирует. Второй ждет освобождения мьютекса, захватывает и устанавливает статус соединения в disconnected, освобождает мьютекс. Можна поточнее сказать когда sigmentation fail ? Akh 2. Как прервет? Если установлен обработчик сигнала, то при поступлении оного вызывается соответсвующий обработчик с прерыванием выполнения любых блокирующих функций. В огороде бузина а в киеве дядька. :) Я привел общие примеры, не расписывая детали, чтобы показать, где могут возникнуть проблемы с зависанием connect(). А, если расписать детали то видение конкретных схем у вас сложится совсем другое. Например, для п.2, думаю, вы и сами догадались, что в данном случае имелись в виду синхронные сокеты. Ну а в п.1 у меня для объекта езернет tcp создается объект коннекшион, который в данном случае является клиентом. Вот про него я и говорил, что может произойти sigmentation fail. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 17:20 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Aklinтаймаут точно можно установить. (сам устанаваливал давно) скорее в параметрах сокета (setsockopt чтоле) аффтопитезь: объект либо именован, либо не существует Не-а. тама нету [setsockopt]. весь просмотрел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 17:21 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Akh Aklinтаймаут точно можно установить. (сам устанаваливал давно) скорее в параметрах сокета (setsockopt чтоле) аффтопитезь: объект либо именован, либо не существует Не-а. тама нету [setsockopt]. весь просмотрел. где-то в этом форуме валялся иходник моего пингера (искать по сырые или RAW сокты) там есть таймаут на что-то... возможно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 17:22 |
|
||
|
Как установить таймаут сокета для connect?
|
|||
|---|---|---|---|
|
#18+
Далее сабж носит позновательный характер, т.к. сделал через select. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 17:22 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34453307&tid=2029064]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 473ms |

| 0 / 0 |
