- send() отправка большого пакета, Michelnok, 16:35 , 13-Июн-08 (1)
>Сталкнулся с проблемой...Клиент не читает данные?
- send() отправка большого пакета, nony, 16:37 , 13-Июн-08 (2)
>>Сталкнулся с проблемой... > >Клиент не читает данные? Клиент читает эти 35кб и больше ничего не получает.
- send() отправка большого пакета, nony, 22:20 , 13-Июн-08 (4)
>>>Сталкнулся с проблемой... >> >>Клиент не читает данные? > >Клиент читает эти 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));
- send() отправка большого пакета, nony, 21:42 , 13-Июн-08 (3)
>>Сталкнулся с проблемой... > >Клиент не читает данные? Сделал sleep в 0.1 секунды в цикле отправки сегментами, пакет прошел. Тоесть видимо проблема в переполнении буфера сокета... Но это не выход из ситуации делать какие то задежки, как то надо узнавать о состоянии буфера отправился пакет или не отправился.... Как это сделать?
- send() отправка большого пакета, Michelnok, 17:18 , 15-Июн-08 (5)
>после чего возвращает -1 и все... А что в errno после того как send вернул -1? P.S. Задержки вставлять - это действительно несерьезно.
|