Это вопрос о последующих действиях для Является успешным методом send() "atomic" ?, поскольку я думаю, что это фактически касается системных вызовов вообще, а не просто отправляет розетки.
Какие системные вызовы могут быть прерваны, а когда они есть, где обрабатывается прерывание? Я узнал о SA_RESTART, но не понимаю, что происходит.
-
Если я делаю системный вызов без SA_RESTART, вызов может быть прерван любыми прерываниями (например, пользовательскими вводами), которые не относятся к моему приложению, но требуют от ОС прервать мой вызов и сделать что-то еще? Или это прерывается только сигналами, которые непосредственно касаются моего процесса (CTRL + C, сокет закрыт,...)?
-
При настройке SA_RESTART, какова семантика send() или любого другого "медленного" syscall? Будет ли он всегда блокироваться до тех пор, пока все мои данные не будут переданы или сокет не снизится, или он не сможет вернуться с номером, меньшим, чем параметр count()?
-
Где выполняется перезапуск? Означает ли ОС, что я хочу, чтобы вызов был перезапущен при любых прерываниях, или какой-то сигнал был отправлен в мой процесс, а затем обработан библиотечным кодом? Или я должен сделать это сам, например. завершите вызов в цикле while и повторите попытку как можно чаще?