ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Когда может возникнуть ситуация, что rev->instance != instance?



On Friday 27 September 2013 19:32:20 megalodon wrote:
> Но после закрытия дескриптора, ядро автоматически удалит этот дескриптор из
> своих структур и не будет по нему отслеживать события.
> 
> Ход событий в общем: воркер блокируется на epoll_wait(), по истечении
> тайм-аута либо по получении nevent событий, воркер просыпается и в цикле
> перебирает эти события. Допустим, встретилось событие на чтение и recv()
> вернуло 0, мы закрываем соединение, при этом дескриптор удаляется из
> структур подсистемы epoll, также в массив cycle->free_connections
> возвращается структура ngx_connection_t.
> 
> Я не понимаю такой момент: почему ядро потом может вернуть событие для уже
> закрытого сокета?
> 

Оно его уже вернуло, ещё до закрытия.  Там есть комментарий:

 /*
  * the stale event from a file descriptor
  * that was just closed in this iteration
  */

Ключевой момент тут "this iteration", вся речь идет о текущей итерации 
обработки 
событий.

Мы могли закрыть соединение до того, как добрались до обработки событий,
с ним связанных (первая проверка).  Могли закрыть соединение на read-событии,
а следом у нас идет write (вторая проверка).

--
Валентин Бартенев
http://nginx.org/en/donation.html
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.