ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


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


  ПРОГРАММЫ 



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












     АРХИВ :: Inet-Admins
Inet-Admins mailing list archive (inet-admins@info.east.ru)

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

Re: [inet-admins] PoPToP под Intel Solaris.



On Tue, Feb 20, 2001 at 03:04:38PM +0300, Dmitriy Ovsaynnikov wrote:
> 
>         Пытались организовать туннель PPTP over Ethernet под Intel Solaris
> 2.7. При этом использовали pptpd-1.0.1 и ppp-2.3.11. Работает все
> замечательно, но при закрытии сессии pptpd умирает с сообщением:
> -------------
> sol1 pppd[3808]: local  IP address 192.168.1.1
> sol1 pppd[3808]: remote IP address 192.168.1.6
> sol1 pptpd[3807]:  CTRL: Error with select(), quitting
> sol1 pptpd[3807]: CTRL: Client 192.168.7.11 control connection finished
> sol1 pppd[3808]: Modem hangup
> sol1 pppd[3808]: Connection terminated.
> sol1 pppd[3808]: Connect time 0.3 minutes.
> sol1 pppd[3808]: Sent 895 bytes, received 830 bytes.
> sol1 pppd[3808]: Exit.
> -------------
> После этого pptpd умирает, и дальнейшие вызовы не обслуживаются.
> Такая же комбинация на FreeBSD 4.2 работает без проблем.
> Судя по исходникам pptpctrl.c, строка 240
> -----
> switch (select(maxfd + 1, &fds, NULL, NULL, &idleTime)) {
> case -1:        /* Error with select() */
>         if (errno != EINTR)
>                 syslog(LOG_ERR, " CTRL: Error with select(), quitting ");
>         goto leave_clear_call;
> ------
> Если посмотреть код ошибки с которым он вылетает, то это 9
> #define EBADF   9       /* Bad file number                      */
> ----
> Где еще и что можно посмотреть?

Нужно найти место раньше select'а , где закрывается сессия
и в месте закрытия дескиптора добавить или поправить код вынесения
дескриптора из fds FD_CLR, или при обратке switch тупо пройтись fstat'ом
по всем fds, вынося инвалидные, и вернуться на select.
Это известная фича *BSD select, который тихо игнорирует ситуацию,
когда среди fds есть уже несуществующие. Зато fstat на открытый fd
может в *BSD вернуть EBADF, поэтому в лоб fstat'ом по fd проходить нельзя.

-- 
Regards,
Yury July

=============================================================================
"inet-admins" Internet access mailing list. Maintained by East Connection ISP.
Mail "unsubscribe inet-admins" to Majordomo@info.east.ru if you want to quit.
Archive is accessible on http://info.east.ru/rus/inetadm.html




 




Copyright © Lexa Software, 1996-2009.