После отключения сокета в режиме записи я пытаюсь записать дублированный дескриптор. Я получаю сломанную трубку, хотя оба они имеют разные файловые дескрипторы. Что не так с моим кодом? или Это ожидаемое поведение?Программирование на Linux: Ошибка записи на дублированный сокет
int clientDupFD = dup(fileDescriptors[0]);
shutdown(fileDescriptors[0], SHUT_WR);
printf ("\n Client: Writing to shutdown(SHUT_WR) socket");
writeOk = write(clientDupFD, msgPtr="Writing message after partial shutdown!", 5);
if(writeOk == -1) {
printf("\n ERR-%s: write() failed to write msg to socket", strerror(errno));
}
else {
printf("\n Client: Message '%s' successfully written to socket", msgPtr);
}
Кроме того, когда я запускаю это через CodeLite, полный выход (последний printfs) не получает казнен, почему?
Только когда я пробую это через отладчик, я вижу, что команда printf «ERR-Broken pipe» выполнялась, и результат был напечатан. Я попытался использовать 'fflush (stdout)', а также 'setbuf (stdout, NULL)'. Оба они не работали. Может ли кто-нибудь помочь?
Можете ли вы объяснить, что вы ожидаете, и почему? –
'shutdown' отправляет пакет TCP/IP, уведомляющий другую сторону об изменениях в сообщении. Основной сетевой сокет изменился. Тот факт, что у вас есть два файловых дескриптора, ссылающихся на один и тот же сетевой сокет, означает, что изменения в соке будут видны через оба дескриптора. – Myst