Всем привет.
У меня странная ситуация... Пишу 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() ставлю принт и на консоле вижу что реакция происходит с задержкой после того как клиент что то пошлет...
Skoree vsego eto ne server, a klient - Nagel, k primeru, ispol'zuetsya...
>Skoree vsego eto ne server, a klient - Nagel, k primeru, ispol'zuetsya...
>
тогда как вы объясните что с апачем все работает быстро? клиент в обоих случаях один и тот же - браузер, Internet Explorer
попробуй убрать + TCP_KEEPALIVE и добавь строчку
setsockopt (s, SOL_TCP, TCP_NODELAY, &One, sizeof (One));
>попробуй убрать + TCP_KEEPALIVE и добавь строчку
>setsockopt (s, SOL_TCP, TCP_NODELAY, &One, sizeof (One));
это ты алгоритм Нагла отключаешь чтоб сервер сразу данные отправлял, у меня проблема ровно другая, но кажется я нашел их источник..эксперименты показали, что это все таки эксплорер тромозит при отправке...