История изменений
Исправление xperious, (текущая версия) :
хм, я так понимаю вот такое в case EPOLLIN:
case EPOLLIN : {
char buf[BUFF_DOWNLOAD_SIZE];
::memset(buf, 0, sizeof(buf));
int byte_count = 1;
while( true ) {
byte_count = ::read(evlist[i].data.fd, buf, sizeof(buf));
if (byte_count == -1) {
//std::cout << "error in read\n";
if(errno != EAGAIN) {
std::cout << "not EAGAIN\n";
}
break;
}
//если клиент закрыл соединение
else if(byte_count == 0) {
if (epoll_ctl(epfd, EPOLL_CTL_DEL, evlist[i].data.fd, &ev) == -1) {
std::cout << "error in delete descriptor from epoll\n";
break;
}
std::cout << "client with descriptor "
<< evlist[i].data.fd
<< " close connection\n";
::close(evlist[i].data.fd);
} else {
std::cout << buf;
}
}
}
break;
такой цикл во многих примерчиках есть(
Исправление xperious, :
хм, я так понимаю вот такое в case EPOLLIN:
case EPOLLIN : {
char buf[BUFF_DOWNLOAD_SIZE];
::memset(buf, 0, sizeof(buf));
int byte_count = 1;
while( true ) {
byte_count = ::read(evlist[i].data.fd, buf, sizeof(buf));
if (byte_count == -1) {
//std::cout << "error in read\n";
if(errno != EAGAIN) {
std::cout << "not EAGAIN\n";
}
break;
}
//если клиент закрыл соединение
else if(byte_count == 0) {
if (epoll_ctl(epfd, EPOLL_CTL_DEL, evlist[i].data.fd, &ev) == -1) {
std::cout << "error in delete descriptor from epoll\n";
break;
}
std::cout << "client with descriptor "
<< evlist[i].data.fd
<< " close connection\n";
::close(evlist[i].data.fd);
} else {
std::cout << buf;
}
}
}
break;
Исходная версия xperious, :
хм, я так понимаю вот такое в case EPOLLIN:
case EPOLLIN : {
char buf[1024/* * 64*/];
::memset(buf, 0, sizeof(buf));
int byte_count = 1;
while( true ) {
byte_count = ::read(evlist[i].data.fd, buf, sizeof(buf));
if (byte_count == -1) {
//std::cout << "error in read\n";
if(errno != EAGAIN) {
std::cout << "not EAGAIN\n";
}
break;
}
//если клиент закрыл соединение
else if(byte_count == 0) {
if (epoll_ctl(epfd, EPOLL_CTL_DEL, evlist[i].data.fd, &ev) == -1) {
std::cout << "error in delete descriptor from epoll\n";
break;
}
std::cout << "client with descriptor "
<< evlist[i].data.fd
<< " close connection\n";
::close(evlist[i].data.fd);
} else {
std::cout << buf;
}
}
}
break;