FIN-ACK-RST ?, Dvorkin, 17-Дек-03, 15:20 [смотреть все]уважаемые сотоварищи!Linux 2.4.18mdk6 столкнулся с такой проблемой. имеется сокет TCP. типа client после создания сокета он переводится в режим NONBLOCK, устанавливается linger: { 1, 0}. устанавливается соединение... обмен данными... вот когда Я закрываю соединение этим сокетом, клиенту шлется RST и сокет считается закрытым, все хорошо. клиент закрывает (для него это практически естественный способ, не спрашивайте, что за клиент :). а вот когда клиент закрывает сокет (например, не получает от меня ниче в течени 10 сек и решает что можно отавалиться), происходит следующее: 1) client.port > mysocket.port F seq_number 2) mysqocket.port > client.port . ack клиент ждет от меня FIN2 2 секунды, потом: 3) client.port > mysocket.port R seq_number все, соединение изчезает из нетстата! при этом мой неблокируемый recv ниче не сообщает. Я получаю сообщение о том что ECONNRESET только когда в следующий раз пытюсь записать что-нибудь в этот сокет. Есть ли какие мысли? Я уже замучался. Сутки сижу, не пойму в чем дело. И поллом, и recvmsg(ERRQUEUE) пробовал... WBR, Dvorkin
|
- FIN-ACK-RST ?, dmitry, 11:21 , 18-Дек-03 (1)
>уважаемые сотоварищи! > >Linux 2.4.18mdk6 >столкнулся с такой проблемой. >имеется сокет TCP. типа client >после создания сокета он переводится в режим NONBLOCK, устанавливается linger: { 1, >0}. >устанавливается соединение... обмен данными... >вот когда Я закрываю соединение этим сокетом, клиенту шлется RST и сокет >считается закрытым, все хорошо. клиент закрывает (для него это практически естественный >способ, не спрашивайте, что за клиент :). а вот когда клиент >закрывает сокет (например, не получает от меня ниче в течени 10 >сек и решает что можно отавалиться), происходит следующее: > >1) client.port > mysocket.port F seq_number >2) mysqocket.port > client.port . ack >клиент ждет от меня FIN2 2 секунды, потом: >3) client.port > mysocket.port R seq_number >все, соединение изчезает из нетстата! при этом мой неблокируемый recv ниче не >сообщает. Я получаю сообщение о том что ECONNRESET только когда в >следующий раз пытюсь записать что-нибудь в этот сокет. > >Есть ли какие мысли? Я уже замучался. Сутки сижу, не пойму в >чем дело. И поллом, и recvmsg(ERRQUEUE) пробовал... > >WBR, Dvorkin не ужели ни у кого никаких мыслей?
- FIN-ACK-RST ?, SergeiZz, 11:12 , 19-Дек-03 (2)
>>устанавливается соединение... обмен данными... >>вот когда Я закрываю соединение этим сокетом, клиенту шлется RST и сокет >>считается закрытым, все хорошо. клиент закрывает (для него это практически естественный >>способ, не спрашивайте, что за клиент :). а вот когда клиент >>закрывает сокет (например, не получает от меня ниче в течени 10 >>сек и решает что можно отавалиться), Ничего не понял: кто закрывает, что закрывает, когда читает, когда пишет, откуда отваливается...>происходит следующее: >>1) client.port > mysocket.port F seq_number >>2) mysqocket.port > client.port . ack >>клиент ждет от меня FIN2 2 секунды, потом: >>3) client.port > mysocket.port R seq_number >>все, соединение изчезает из нетстата! при этом мой неблокируемый recv ниче не >>сообщает. Я получаю сообщение о том что ECONNRESET только когда в >>следующий раз пытюсь записать что-нибудь в этот сокет. Вполне возможная ситуация. Что именно удивляет? >не ужели ни у кого никаких мыслей? Мысли есть. Ответа нет.
- FIN-ACK-RST ?, Dvorkin, 11:51 , 19-Дек-03 (3)
>>>устанавливается соединение... обмен данными... >>>вот когда Я закрываю соединение этим сокетом, клиенту шлется RST и сокет >>>считается закрытым, все хорошо. клиент закрывает (для него это практически естественный >>>способ, не спрашивайте, что за клиент :). а вот когда клиент >>>закрывает сокет (например, не получает от меня ниче в течени 10 >>>сек и решает что можно отавалиться), >Ничего не понял: кто закрывает, что закрывает, когда читает, когда пишет, >откуда отваливается... ну клиент закрывает сокет с моей программой.> >>происходит следующее: >>>1) client.port > mysocket.port F seq_number >>>2) mysqocket.port > client.port . ack >>>клиент ждет от меня FIN2 2 секунды, потом: >>>3) client.port > mysocket.port R seq_number >>>все, соединение изчезает из нетстата! при этом мой неблокируемый recv ниче не >>>сообщает. Я получаю сообщение о том что ECONNRESET только когда в >>>следующий раз пытюсь записать что-нибудь в этот сокет. >Вполне возможная ситуация. Что именно удивляет? что ECONNRESET в recv нет при этом. > >>не ужели ни у кого никаких мыслей? >Мысли есть. Ответа нет. я уже нашел ответ. спасибо.
|