From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <3E82B048.20802@rmts.donpac.ru> Date: Thu, 27 Mar 2003 11:03:20 +0300 From: =?KOI8-R?Q?=F0=D2=CF=CB=CF=D0=D8=C5=D7_=E5=D7=C7=C5=CE=C9=CA?= User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru-RU; rv:1.2.1) Gecko/20030210 X-Accept-Language: ru-ru, en MIME-Version: 1.0 To: community@altlinux.ru Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit Subject: [Comm] xinetd =?KOI8-R?Q?=C9_=D5=D3=D4=CF=CA=DE=C9=D7=CF=D3=D4=D8_=D3?= =?KOI8-R?Q?=D7=D1=DA=C9?= Sender: community-admin@altlinux.ru Errors-To: community-admin@altlinux.ru X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: community@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: Здравствуйте! Возникла задача передачи файла с диалапных станций на сервер и выполнения неких действий по окончании загрузки. Идеальным выходом была бы возможность FTP-сервера запускать на выполнение некий скрипт после возникновения некоторых событий (например, окончания upload). Но такого ftp не нашли, поэтому был написан сервис, работающий через xinetd (т.е. читающий файл с stdin) и выполняющий указанные функции. Его код выглядит примерно так (опущена авторизация и запуск скрипта): /*********************************************************************/ read(0, &file_len, 4); openlog(argv[0], 0, LOG_USER); syslog(LOG_USER | LOG_DEBUG, "<< Fileload service started >>"); if (file_len) { syslog(LOG_USER | LOG_DEBUG, "Read data [%d bytes] ...", file_len); unlink(file); sprintf(file, "/home/%s/tmp/update.zip", user); fd = open(file, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR); do { bytes_read = read(0, buffer, buff_len); if (bytes_read == -1) { syslog(LOG_USER | LOG_DEBUG, "Read error: %s", strerror(errno)); syslog(LOG_USER | LOG_DEBUG, "<< Fileload service read error >>"); closelog(); return 1; } all_read += bytes_read; write(fd, buffer, bytes_read); syslog(LOG_USER | LOG_DEBUG, "Buffer %d; All read %d; Read %d", buff_len, all_read, bytes_read); } while (all_read < file_len); close(file); syslog(LOG_USER | LOG_DEBUG, "Save data into file %s...", file); } Ну так вот, проблема в том, что в пределах города этот сервис работает (от разных провайдеров). А как только люди пытаются загрузить файл из другого города (километров за 500, но звонят они, естественно не по межгороду, а к своему провайдеру), в логе я вижу следующее: Read data [741604 bytes] ... Buffer 100000; All read 1412; Read 1412 Buffer 100000; All read 2824; Read 1412 Buffer 100000; All read 4236; Read 1412 Buffer 100000; All read 5648; Read 1412 Read error: Connection reset by peer Никаким плохим диалапом это объяснено быть не может, т.к. стабильно воспроизводится на линиях, которые заведомо лучше внутригородских. Вопрос: в чем причина и что делать? Если необходимо увеличить время ожидания, то где и как это делать? -- С уважением, Прокопьев Евгений