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 [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
