|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Nick A. Leuta 2:5020/400 27 Apr 2003 02:45:02 To : All Subject : ftpd: обработка OOB --------------------------------------------------------------------------------
Либо я чего-то пропустил и не понял идею, либо и вправду что-то не так...
Имеем внутри циклов при передаче данных что-то типа
if (recvurg)
goto got_oob;
и потом в конце функции:
got_oob:
myoob();
recvurg = 0;
transflag = 0;
return (-1);
Место, где бы recvurg получал значение, нашлось только одно:
static void
sigurg(int signo)
{
recvurg = 1;
}
В итоге передача данных, насколько я понял, прервется при любой активности
на управляющем соединении. Все бы ничего, если бы не одно "но" - myoob()
обрабатывает команды ABOR и STAT, и если первая как раз и должна
прервать передачу данных, то вторая мягко говоря не обязана... А от
myoob()-то как раз ничего и не зависит...
В принципе, легко исправить, вернув обратно myoob() роль обработчика
SIGURG, как это и было изначально, только вот непонятно, зачем было
огород-то городить (разве для того, чтобы было одинаково с OpenBSD -
там то же самое)?
Заодно не понял, чем старые setjmp()/longjmp() так разонравились -
дополнительное сравнение внутри цикла - оно конечно немного, но
все же, особенно если цикл делает putc() того, что было
про'getc()'овано в его условии? :-)
=======
SkyNick
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/6577ef1960e8.html, оценка из 5, голосов 10
|