Почему при отправке одного буфера двум клентам(tsp сокетам) второму данные не доходят
Пишу ws сервер, который берет поток с вебкамеры и покадрово, конвертируя в jpg, отправляет его всем подключенным клиентам. Когда клиент один, все хорошо доходит, но когда подключается второй клиент, ему не приходят данные. Почему это происходит? Для теста открываю два браузера. Продебажил, уходит столько данных, сколько нужно.
SocketPair parent([](SocketPair mainProcess){
SocketServer server("8001");
while (1){
SocketClient* client = server.Listen();
char* request = client->Receive();
WebSocketOpener::OpenWebSocketConnection(request, client->GetSocketDescriptor());
mainProcess.SendDescriptor(client->GetSocketDescriptor());
delete client;
}
});
rlimit test;
getrlimit(RLIMIT_NOFILE, &test);
test.rlim_cur = 4050;
setrlimit(RLIMIT_NOFILE, &test);
CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY);
IplImage* frame= nullptr;
std::vector<WebSocket*> Ws;
ObjectEpoll ep;
thread heandler([&](){
while(1){
int client = parent.ReceiveDescriptor();
printf("%d \n", client);
WebSocket* WsClient = new WebSocket(&client);
close(client);
Ws.push_back(WsClient);
ep.AddDescriptor(WsClient->GetDescriptor(), EPOLLOUT, WsClient);
}
});
heandler.detach();
epoll_event events[10];
while(1)
{
////здесь начинаются проблемы
int size = ep.Wait(events, 10); //достаю из epoll соккеты, готовые для записи
frame = cvQueryFrame( capture ); //беру кадр с вебки
int j = frame->imageSize;
auto temp = cvEncodeImage(".jpg", frame); //преобразую его в jpg
uchar *img = temp->data.ptr; //присваиваю img указатель на буфер с данными
int i = 0;
////в этом цикле отправляю всем клиентам, которых достал из epoll, данные
for (; i < size; i++){
WebSocket* cl;
cl = (WebSocket*)events->data.ptr;
cl->Send(img, temp->width, BIN);
}
cvReleaseMat(&temp); //очищаю буфер с данными
}
cvReleaseCapture( &capture );