The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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 нет при этом.

        >
        >>не ужели ни у кого никаких мыслей?
        >Мысли есть. Ответа нет.
        я уже нашел ответ. спасибо.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру