>>>>Аодскажите пожалуйста, какие есть способы доставки клиентом серверу данных находящихся в буфере
>>>>передачи. А то сервер подвисает, ждёт конца файла. TCP_NONDELAY не помогает.
>>>>
>>>
>>>Скорее всего у теб какой то глюк или ошибка в клиенте....
>>>
>>>А что бы сервер не зависал на чтении надо использовать select с
>>>установкой таймаута
>>
>>
>>Буду ждать новых предложений...
>
>Если есть возможность разместите код клиент-сервера. Это упростит задачу. Сервер принимает файл:
int filein (char *pathf,int fd) {
int n;
FILE *f;
char buf[MAX_PATCH_LEN];
if ((f=fopen(pathf,"w+"))==NULL)
{
return (-1);
}
while ((n=read(fd,&buf,sizeof(buf)))>0) { //Здесь мы очень долго ждём
if (fwrite(buf,1,n,f)<0)
{
fclose (f);
return (-1);
}
}
fclose (f);
}
Клиент использует функцию для передачи файла:
int fileto (char *pathf,int fd) {
int n;
FILE *f;
char buf[MAX_PATCH_LEN];
if ((f=fopen(pathf,"r"))==NULL)
{
return (-1);
}
while ((n=fread(&buf,1,sizeof(buf),f))!=NULL) {
if (write(fd,buf,n)<0)
{
return (-1);
}
}
shutdown (fd,2); //Если без этого, то сервер так и не получит последних данных
//находящихся у клиента.
}