Добрый день!
В широко известной книге Стивенса "UNIX разработка сетевых
приложений", есть следующий код:
01: ssize_t writen(int fd, const void *vptr, size_t n)
02: {
03: size_t nleft;
04: ssize_t nwritten;
05: const char *ptr;
06:
07: ptr = vptr;
08: nleft = n;
09: while(nleft > 0) {
10: if((nwritten = write(fd, ptr, nleft)) <= 0) {
11: if(errno == EINTR) nwritten = 0;
12: else return -1;
13: }
14: nleft -= nwritten;
15: ptr += nwritten;
16: }
17: return n;
18: }
Мой вопрос касается строки под номером 10. Представим себе ситуацию,
когда узел закрывает сокет. Тогда write() вернет 0 и дальнейшее
поведение программы будет зависеть от значения errno, которое может
оказаться любым. Т.к. ошибка в книжке маловероятна, хотелось бы, чтобы
знающие люди подсказали где ошибка в моих рассуждениях.
Ответ на:
комментарий
от klalafuda
Ответ на:
комментарий
от syomin

Ответ на:
комментарий
от klalafuda
Ответ на:
комментарий
от syomin

Ответ на:
комментарий
от klalafuda
Ответ на:
комментарий
от syomin

Ответ на:
комментарий
от klalafuda
Ответ на:
комментарий
от syomin

Ответ на:
комментарий
от klalafuda
Ответ на:
комментарий
от syomin

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Консольный обмен сообщениями (2017)
- Форум Сокеты: segfault при копировании char* в std::string (2014)
- Форум Вывести содержание бинарного файла (2013)
- Форум C++[RAII], c network, recv неоправданный интервал (2008)
- Форум Реализация системного вызова ? (2008)
- Форум Использование массивов в системном вызове read ( ) (2016)
- Форум FUSE (2013)
- Форум Исследование CryEngine 2 SDK 1.4.0 (2012)
- Форум Как узнать, сколько памяти доступно для выделения? (2005)
- Форум Самописный dd не пишет в /dev/mtd (2010)