В прошлый раз ответы сообщества мне очень помогли, ещё раз большое всем спасибо. Прога заработала и в локальной сети и через интернет.
У меня новый вопрос.
Вот я создаю сокетное соединение, accept'ом получаю парный сокет и могу туда-сюда байтики кидать.
После этого делаю poll, ожидая данные.
После этого в цикле читаю данные функцией recv и... цикл закрывается только после закрытия парного сокета. Т.е. я не знаю, сколько объектов и с какой периодичностью приходят в сокет. Сами объекты десериализируются без проблем, но я не знаю, есть ли ещё в буфере что-то и когда прилетит следующий объект (и прилетит ли он).
Т.е. получается, что один раз вызывается accept для установки соединения, один раз взывается poll, а потом "вечно" в цикле вызывается recv и висит в этой функции, пока не придёт сообщение.
Мне кажется, что я что-то делаю не правильно, потому что не ясен смысл метода poll (или он только для передачи первых байт нужен, после установки соединения, а потом можно и без него обходиться?). Соединение может оставаться установленным от пары секунд, до нескольких суток (смотря с чем приходится работать), при этом поток будет висеть в функции recv в ожидании следующего объекта, которого может и не быть в принципе. При этом в обратном направлении за это время передаются десятки тысяч объектов (независимо от общего времени работы).
Использую блокирующий сокет, неблокирующий пока что не удалось правильно использовать.
ПСЕВДОКОД
socket = accept;
if( poll( socket ) )
{
while( recv(....) > 0 )
{
... ;
}
}