The OpenNET Project / Index page

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

Qst - daemon with sockets (буферизация) (socket buffer)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: socket, buffer,  (найти похожие документы)
_ RU.UNIX.BSD (2:5077/15.22) _____________________________________ RU.UNIX.BSD _ From : Michael Levitin 2:5020/400 10 Aug 98 11:54:28 Subj : Qst - daemon with sockets (буферизация) ________________________________________________________________________________ From: Mich@vorkuta.com (Michael Levitin) Greetings ! Hе сможет ли кто-нибудь ткнуть меня носом : что я делаю неправильно... Hаписалась некая програамка, с использованием sockets , которая повисает на xx порту и обслуживает входящие соединения. Сделано это стандартным образом : ...... ля-ля-ля.... создаем сокет , биндим его....... ............. listen (s,5); /// max 5 connect for (;;) { if ((g = accept(s,0,0)) < 0) { perror("accept"); exit(1); } // printf(" Connect from host if ((pid = fork()) == -1 ) { perror (" fork"); exit(1); } if ( pid == 0 ) { dup2(g,1); dup2(g,0); printf("100 ready.\r\n"); cmd(); // функция, которая обрабатывает ввод.вывод............... close (g); exit(0); } } Если эту задачку запустить из командной строки, то все ОК - захожу telnet-ом на порт, вижу отклик, ввожу что-то, на это что-то тож отклики вижу соответственный...... Hо вот если на самом верху написать daemon(0,0);, то опаньки - с stdin, stdout начинает твориться что-то с чем-то..... Это понятно и про это написано в man к daemon. Ладно.Я пытаюсь этот сокет (g который ) c помощью fdopen ассоциировать с FILE * потоком - f =fdopen(g,"rw"); и после этого, соответственно, использую fprintf & fscanf. Hо - когда я подключаюсь telnet-ом, в ответ тишина - вводится все, что угодно, но отклика не видно, т.е. fprintf не работает. А вот если набрать команду, означающую "конец соединения", после этого на экран вываливается все, что должен был напечатать fprintf.... ТО есть, получается, что сокет работает только на ввод, и лишь когда я его закрываю ( close(g) after cmd() ) - вываливается весь буфер..... И вот что-то никак не получается все эти симптомы сложить вместе и сделать правильный вывод :-( Понимаю, что здесь нечто простейшее, но не могу найти....... Ткните носом, плз. А то обидно как-то :-) А второй нюанс - при таком методе обработки соединений, начинают плодиться "висяки" - зомби процессы... Почему ? Ведь стоит же exit.... -- CU, Michael. Michael Levitin nic-hdl: MLL10-RIPE mailto:Mich@vorkuta.com --- ifmail v.2.14dev2 * Origin: Trust Ltd. (2:5020/400@fidonet) _ RU.UNIX.BSD (2:5077/15.22) _____________________________________ RU.UNIX.BSD _ From : Anton Petrusevich 2:5004/16.29 10 Aug 98 17:35:22 Subj : Re: Qst - daemon with sockets ________________________________________________________________________________ >>>>> "ML" == Michael Levitin writes: ML> и после этого, соответственно, использую fprintf & fscanf. Hо - когда ML> я подключаюсь telnet-ом, в ответ тишина - вводится все, что угодно, но ML> отклика не видно, т.е. fprintf не работает. А вот если набрать ML> команду, означающую "конец соединения", после этого на экран ML> вываливается все, что должен был напечатать fprintf.... ТО есть, ML> получается, что сокет работает только на ввод, и лишь когда я его ML> закрываю ( close(g) after cmd() ) - вываливается весь буфер..... Отключи буферизацию stdout. -- Best regards, Anton. the butane lighter causes the pincushioning --- Gnus v5.5/XEmacs 20.4 - "Emerald" * Origin: Omskelecom (2:5004/16.29@fidonet)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor