URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2050
[ Назад ]

Исходное сообщение
"тормозит select()???"

Отправлено vital , 08-Сен-03 14:40 
Всем привет.
У меня странная ситуация... Пишу HTTP-сервер, клиентов опрашиваю select()-ом, и у меня подозрение что в нем он тормозит, т.к. реакция сервера на запросы заторможена. То же самое с использованием апача проходит без тормозов. Может кто подскажет в чем проблема?

Вот кусок кода как у меня инициализируется сервер:
--------------------------------------
    int One = 1;
    s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
    setsockopt (s, SOL_SOCKET, SO_REUSEADDR + SO_KEEPALIVE, &One, sizeof (One));
    sockaddr_in Addr;
    memset (&Addr, 0, sizeof (Addr));
    Addr.sin_family = AF_INET;
    Addr.sin_port = htons (MY_PORT);
    Addr.sin_addr.s_addr = INADDR_ANY;
    bind (s, (sockaddr*) &Addr, sizeof (Addr));
    listen (s, 20);
    ioctl (s, FIONBIO, &One);

    fd_set ss;
    FD_ZERO (&ss);
    FD_SET (s, &ss);
    while (ok) {
        fd_set tss = ss;
        int srv = select (maxfd + 1, &tss, 0, 0, 0);
        .........
        и т.д.
    }
--------------------------------------
после select() ставлю принт и на консоле вижу что реакция происходит с задержкой после того как клиент что то пошлет...


Содержание

Сообщения в этом обсуждении
"тормозит select()???"
Отправлено genie , 09-Сен-03 02:24 
Skoree vsego eto ne server, a klient - Nagel, k primeru, ispol'zuetsya...

"тормозит select()???"
Отправлено vital , 09-Сен-03 02:35 
>Skoree vsego eto ne server, a klient - Nagel, k primeru, ispol'zuetsya...
>


тогда как вы объясните что с апачем все работает быстро? клиент в обоих случаях один и тот же - браузер, Internet Explorer


"тормозит select()???"
Отправлено NL , 09-Сен-03 12:32 
попробуй убрать + TCP_KEEPALIVE и добавь строчку
setsockopt (s, SOL_TCP, TCP_NODELAY, &One, sizeof (One));

"тормозит select()???"
Отправлено vital , 09-Сен-03 19:55 
>попробуй убрать + TCP_KEEPALIVE и добавь строчку
>setsockopt (s, SOL_TCP, TCP_NODELAY, &One, sizeof (One));


это ты алгоритм Нагла отключаешь чтоб сервер сразу данные отправлял, у меня проблема ровно другая, но кажется я нашел их источник..

эксперименты показали, что это все таки эксплорер тромозит при отправке...