您建议为隧道使用哪些套接字选项?

时间:2011-04-13 10:01:45

标签: sockets tcp tunnel

我正在编写自定义隧道(首先是自定义问候语,然后连接成为隧道),但速度很慢。

我想知道我能做些什么来提高速度。

提高使用短消息的连接速度的一种方法是禁用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);
    }
}

我省略了错误处理和连接套接字的代码,使其更具可读性。

2 个答案:

答案 0 :(得分:0)

我认为禁用nagle算法会有所帮助。您提供的信息太少,无法提供更具体的帮助。因此,其余的答案只是猜测。您需要提供隧道每端的平台/操作系统以及您正在使用的编程语言。

例如。如果压缩请求/响应,HTTP隧道将大大受益。但如果您使用的是手持设备,则会使用更多的电池。

如果您使用UDP而不是TCP,RTSP将会受益,因为它是一个实时协议,并不真正关心一切是否正常到位。

答案 1 :(得分:0)

问题可能出在代码 rathar而不是socket选项中。 TCP_NODELAY可能会有所帮助,也可能没有帮助。大插座和接收器可能会有所帮助。您的代码可能会引入延迟。向我们展示一些代码。