в целях обучения решил поковыряться с внеполосными сообщениями и сразу же наткнулся на пару проблем. Во-первых, можно послать только один байт срочных данных (насколько я понял это баг ядра линукса, а может и нет). Во вторых если срочные данные посылаются достаточно часто, они могут не успеть обработаться и затесаться в общий поток данных. Тут опять же спасать должно только peek по одному байту, но это очень похоже на кастыль. И вот совсем другая проблема, если срочные данные идут из другого потока, то клиенту вообще ничего не приходит.
Может быть кто-либо может что подсказать по этой теме, ибо все что я понял из курения мануалов, что OOB вообще не сильно любят и не сильно используют, ибо штука не надежная.
Давно не работал с OOB, но теоретически описанное Вами поведение должно наблюдаться только при установленной опции SO_OOBINLINE, с ней OOB-данные попадают в общий поток.
Посмотрел документацию — в TCP данных OOB может быть только 1 байт, причем он может перезаписан при поступлении следующих OOB-данных, остальные данные идут в общем потоке. Вы шлете данные в общем потоке и добавляете к ним один OOB-байт. Считать эти данные так же следует из общего потока, они будут отданы в отдельном recv().