уважаемые сотоварищи!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
>уважаемые сотоварищи!
>
>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не ужели ни у кого никаких мыслей?
>>устанавливается соединение... обмен данными...
>>вот когда Я закрываю соединение этим сокетом, клиенту шлется 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 только когда в
>>следующий раз пытюсь записать что-нибудь в этот сокет.
Вполне возможная ситуация. Что именно удивляет?>не ужели ни у кого никаких мыслей?
Мысли есть. Ответа нет.
>>>устанавливается соединение... обмен данными...
>>>вот когда Я закрываю соединение этим сокетом, клиенту шлется 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 нет при этом.>
>>не ужели ни у кого никаких мыслей?
>Мысли есть. Ответа нет.
я уже нашел ответ. спасибо.