что будет с буфером потока FILE, если соединение с сокетом ненормально отключится? - PullRequest
0 голосов
/ 14 марта 2011

код моего TCP-сервера выглядит так:

conn_fd = accept();  
stream = fdopen(conn_fd...);  
//...   
fp = fopen(path, "r");   
while ((c = getc(fp)) != EOF)
    fputc(c, stream);

если сокет отсоединится по какой-либо причине (линия Ethernet отключена), будет ли функция fputc блокировать вызывающий процесс? что будет с потоковым буфером?
если блокировка функции fputc, могу ли я установить SO_SNDTIMEO для решения проблемы?

Большое спасибо!

1 Ответ

2 голосов
/ 14 марта 2011

При прекращении соединения все функции чтения / записи будут возвращать ошибку (чтение начинает прерываться только после считывания входящего буфера). Проверьте errno, если хотите быть уверенным, почему больше нет данных для чтения / записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...