У меня есть следующий код и мои записи, которые записываются в сокет после отправки нескольких сотен байтов. Я читал байты с fread, используя флаг «rb».TCP-стоп перестает писать в середине цикла
char filebuff[size_aux];
i=0;
int negative=0;
int positive=0;
int zero=0;
while(i<size_aux) //size_aux is 79067
{
bytesSent = write(clnt_fd, &filebuff[i], 1);
if(bytesSent>0) positive++;
if(bytesSent<0) negative++;
if(bytesSent==0) zero++;
i++;
}
Что это напечатано было это:
Positive: 868
Negative: 78199
Zero: 0
Я проверил, что он посылает 868 прямо в ряд, а затем прекращает передачу, что дает -1 в качестве значения поворота записи. Количество отправленных байт является случайным, иногда похожим на 868 в других случаях, например 600, но малыми значениями по сравнению с реальным размером файла. До этого, я должен был вставить следующий код:
signal (SIGPIPE, SIG_IGN);
Потому что в середине цикла в то время, было бы выйти из моей программы на терминал.
Является ли розетка неблокирующей? – usr
Прочитайте документацию по записи. Посмотрите на коды ошибок. Теперь исправьте свой код, чтобы подробно просмотреть эти коды ошибок или, по крайней мере, распечатать, какие ошибки ваш код получает. –
Ошибка, которую я даю мне 0, поэтому я не могу много сделать. Как узнать, не является ли сокет неблокирующим, у меня нет доступа к серверному коду. – Elsendion