Сталкнулся с проблемой... Хочу на клиент отправить пакет длиннойю в мегабайт... делаю send(сокет, пакет,1000000,0) и уходит на клиент толко 35кб...думал что проблема с переполнением буфера сокета... написал ф-ию которая сегментирует этот пакет на мелкие размером 1024 байта... но в сумме уходит на клиент опять только 35кб после чего возвращает -1 и все...
В чем может быть проблема подскажите пожалуйста и как мне отправить пакет такой длинны правильно?
>Сталкнулся с проблемой...Клиент не читает данные?
>>Сталкнулся с проблемой...
>
>Клиент не читает данные?Клиент читает эти 35кб и больше ничего не получает.
>>>Сталкнулся с проблемой...
>>
>>Клиент не читает данные?
>
>Клиент читает эти 35кб и больше ничего не получает.Все, спасибо. Проблему решил.
Вот ф-ия, малли кому понадбится.int sendall(int sock,char* pbuf,int noc)
{
int nreste, necrit;
nreste = noc;
while (nreste > 0) {
refecriture:
necrit = write (sock, pbuf, nreste);
if ( (necrit < 0) && (errno = EWOULDBLOCK)) {
printf("EWOULDBLOCK");
fcntl(sock, F_SETFL, ~FNDELAY&fcntl(sock, F_GETFL,0));
goto refecriture;
}
if (necrit < 0) return(necrit);
nreste -= necrit;
pbuf += necrit;
}
return(noc-nreste);
}
вот собственно дилей выставляется
fcntl(sock, F_SETFL, ~FNDELAY&fcntl(sock, F_GETFL,0));
>>Сталкнулся с проблемой...
>
>Клиент не читает данные?Сделал sleep в 0.1 секунды в цикле отправки сегментами, пакет прошел. Тоесть видимо проблема в переполнении буфера сокета... Но это не выход из ситуации делать какие то задежки, как то надо узнавать о состоянии буфера отправился пакет или не отправился.... Как это сделать?
>после чего возвращает -1 и все...А что в errno после того как send вернул -1?
P.S. Задержки вставлять - это действительно несерьезно.