LINUX.ORG.RU

Вопросы по поводу MSG_OOB


0

0

Интересует вот такие вот вотпросы.
1) через TCP соединены Linux программа и Windows программа.
Если я в Linux программе делаю send с флагом MSG_OOB, то сможет ли Windows приложение получить данные если делает recv без флага MSG_OOB ?
Если да, то будет ли толк от этого? Данных буквально 12 байт шлется. Или обязательно необходимо чтобы и recv был с флагом MSG_OOB ?

2) в чем может быть ошибка при следующей сетуации:
- Серверное приложение под линукс открывает 2 порта.
- Клиенты - windows приложения. коннектятся на первый порт
- При некоторых условиях клиенту шлется сообщение чтобы он подключился на второй порт.
- При учачном или неудачнмо коннекте клиентом отсылаются данные о результате подключения.

И вот заметил такую вешь: Когда одновременно допустим 150 клиентам дать команду коннекта на второй порт то сыпятся такие вот ошибки:
1) клиент не получает сообщения. хотя на серверноей стороне send вернул что всё норм. Встречается редко.
2) А вот более частая сетуация: у клиента connect на второй порт вылетает по таймауту. Хотя на серверной стороне нет никаких промедлений. т.е. после accept сокет сразу добавляется в epoll. в listen задана очередь 1000.
При этом добавления судя по логу идут мгновенно.

Наиболее ответ интересует по поводу второй ошибки. Такое ощущение что чтото с конфигом TCP.


>Данных буквально 12 байт шлется.

С виндой не работал, но по стандарту и по факту Unix/Linux шлёт ровно 1 (один) байт внеполосных/срочных байт.

bind2cppman ()

>> клиент не получает сообщения. хотя на серверноей стороне send вернул что всё норм. Встречается редко.

TCP? UDP? ?

в любом случае - успех от send() говорит только о том, что данные переданы локальному стеку, а тот уже будет пытаться доставить их дальше.
Уверенность в получении ланных удалённым приложением может быть только после получения ответа от того самого приложения.



deadman ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.