Я пишу собственный туннель (сначала настраиваемый привет, а затем соединение становится туннелем), но он довольно медленный.
Мне интересно, могу ли я что-нибудь сделать для увеличения скорости.
Одним из способов увеличения скорости для соединений, которые, например, используют короткие сообщения, было бы отключение алгоритма Nagle (TCP_NODELAY).
Что бы вы порекомендовали для туннелирования?
Я туннелирую RTSP и HTTP, если это поможет.
РЕДАКТИРОВАТЬ: код настолько прост, насколько это возможно:
int remote_fd;
int local_fd;
int fdmax;
char buf[1 << 10];
fdset master_set, read_set;
FD_ZERO(&master_set);
FD_ZERO(&read_set);
FD_SET(remote_fd, &master_set);
FD_SET(local_fd, &master_set);
fdmax = remote_fd > local_fd ? remote_fd : local_fd;
//Connect both remote_fd and local_fd
...
while (1) {
read_set = master_set;
select(fdmax + 1, &read_set, NULL, NULL, NULL);
if (FD_ISSET(local_fd, &read_set)) {
int n = recv(local_fd, buf, sizeof(buf), 0);
send(remote_fd, buf, n, 0);
}
if (FD_ISSET(remote_fd, &read_set)) {
int n = recv(remote_fd, buf, sizeof(buf), 0);
send(local_fd, buf, n, 0);
}
}
Я опустил обработку ошибок и код, соединяющий сокеты, чтобы сделать его более читабельным.