приветы
допустим, есть два процесса - п1 и п2. Связаны между собой через unix доменный сокет. п1 пишет в п2 некоторые данные и ждет результат Р1 выполнения, который п2 должен закинуть в этот сокет. п1 ждет этот результат с помощью select с таймаутом.
В итоге, по истечении таймаута п1 выполняет некоторую другую работу (а в этот момент допустим п2 все таки запишет результат Р1 в сокет) и потребуется допустим еще раз отправить уже какие то другие данные потоку п2 и получить от п2 уже результат Р2 обработки новых данных.
Что будет когда п1 вызовет select с таймаутом во второй раз:
- 1) select сразу вернет управление и recv прочитает «протухшие» данные из сокета, то есть Р1? - 2) что прочитает п2 из сокета - то что он туда записал Р1 или новые данные от п1 (допустим чтение идет одинаковыми размерами)?
И вопрос еще - как это побороть? может есть какой то устоявшийся механизм или дело просто в доработке протокола обмена между п1 и п2?
вопрос 2 в итоге к тупому вопросу можно свести - если процесс п2 записал в сокет 16 байт, но никто этот сокет не прочитал, и процесс п1 записал в сокет еще 16 байт, то потом если процесс п2 будет считать куском 16 байт - какие данные он получит?