rendered paste body FD_ZERO(&sockUp);
FD_SET(sd, &sockUp);
FD_SET(fd, &sockUp);
if(sd > max)
max = sd;
if(fd > max)
max = fd;
logger("Now accepting connections");
while (1)
{
sockUpUse = sockUp;
select(max + 1, &sockUpUse, NULL, NULL, NULL);
if (FD_ISSET(sd, &sockUpUse))
{
socklen_t addrlen = sizeof(clientInfo);
// Prijimam nove spojeni
int client = accept(sd, (sockaddr*)&clientInfo, &addrlen);
logger("Connection accepted from %s", inet_ntoa(clientInfo.sin_addr));
socklist.push_back(client);
}
int slen = 0;
unsigned char sbuff[BUFSIZE];
int slenght = 0;
if(FD_ISSET(fd, &sockUpUse))
{
if((slenght = read( fd, sbuff, BUFSIZE)) <= 0)
usleep(100);
else
{
for(std::vector<int>::iterator i = socklist.begin(); i != socklist.end(); i++)
slen = send((* i), sbuff, slenght, 0);
logger("Data received correctly, %d bytes sent to network", slen);
}
}
slen = 0;
for(std::vector<int>::iterator i = socklist.begin(); i != socklist.end(); i++)
{
if (FD_ISSET(*i, &sockUpUse))
{
unsigned char buffer[BUFSIZE];
int lenght;
if ((lenght = recv(*i, (void *)buffer, BUFSIZE, 0)) <= 0)
{
// Prijato 0 bytu - druha strana uzavrela spojeni
socklen_t addrlen = sizeof(clientInfo);
getpeername((*i), (sockaddr*)&clientInfo, &addrlen);
close(*i);
logger("Connection closed for %s", inet_ntoa(clientInfo.sin_addr));
socklist.erase(i);
// Ukoncim cyklus. Neni dobre pokracovat v prochazeni kontejneru, kdyz jsem vymazal prvek.
break;
}
else
{
for(std::vector<int>::iterator j = socklist.begin(); j != socklist.end(); j++)
{
if (*i != *j)
slen = send((* j), buffer, lenght, 0);
}
if(slen == 0)
logger("Data received correctly, but no more clients connected");
else
logger("Data received correctly, %d bytes sent to network", slen);
slen = write(fd, &buffer, lenght);
logger("Data received correctly, %d bytes sent to serial device", slen);
}
}
}
FD_ZERO(&sockUp);
FD_SET(sd, &sockUp);
FD_SET(fd, &sockUp);
max = 0;
if(sd > max)
max = sd;
if(fd > max)
max = fd;
for(std::vector<int>::iterator i = socklist.begin(); i != socklist.end(); i++)
{
if (*i > max)
{
max = *i;
}
FD_SET(*i, &sockUp);
}
if (max < sd)
{
max = sd;
}
}
close(sd);
close(fd);
for_each(socklist.begin(), socklist.end(), close);
logger("Server closed");