Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Andrey Ushakov                       2:5020/400     20 Nov 2006  00:41:24
 To : All
 Subject : sendfile system call in FreeBSD
 -------------------------------------------------------------------------------- 
 
 Вроде подразобрался, и увидел проблему с использованием recv() и sendfile() в
 связке.
 
 У меня в проге такой код
 У клиента:
 while(rc != -1 && filesize > 0)
 {
 rc = sendfile(fd, s, offset, 0, (struct sf_hdtr *) NULL, &sbites, 0);
 filesize -= sbites;
 offset += sbites;  
 }
 Слизал из FTPD.C =)
 
 У сервера:
 if((rc = recv(s1, buf, sizeof(buf), 0)) < 0)
 {
 perror("recv error");
 exit(1);
 }
 
 Если в вызове recv() оставить 0, то работать будет, но с очень маленькими
 файликами. Я ставил вместо 0 MSG_WAITALL и убедился, что проблема в recv() она
 возвращает управление до того как будет послан весь файл. Соответственно в
 клиенте имеем -1 и errno = 32 
 =\
 
 В FTPD.C есть такая штука упомянутом выше while
 if (err == -1){
 if (!cnt)
 goto oldway;
 goto data_err;
 }
 ...
 oldway:
 ...
 while ((cnt = read(filefd, buf, (u_int)blksize)) > 0 &&
        write(netfd, buf, cnt) == cnt)
 ...
 У меня это не прокатило. recv() вылетел ничего не считав =\
 
 Вот. Может кто знает как тут можно выкрутится. Уж очень не хочется сдаваться и
 читать на стороне клиенте файл в массив а потом слать send()ом.
 
 Айм стак =(
 
 cmp: всё познаётся в сравнении
 
 --- ifmail v.2.15dev5.3
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 sendfile system call in FreeBSD   Andrey Ushakov   20 Nov 2006 00:41:24 
 Re: sendfile system call in FreeBSD   Valentin Davydov   20 Nov 2006 13:29:57 
 Re: sendfile system call in FreeBSD   Andrey Ushakov   20 Nov 2006 17:44:22 
 Re: sendfile system call in FreeBSD   Vadim Goncharov   20 Nov 2006 20:15:52 
 Re: sendfile system call in FreeBSD   Andrey Ushakov   20 Nov 2006 22:54:27 
 sendfile system call in FreeBSD   Alex Semenyaka   20 Nov 2006 19:47:56 
 Re: sendfile system call in FreeBSD   Andrey Ushakov   20 Nov 2006 17:52:27 
Архивное /ru.unix.bsd/166791d92809d.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional