LINUX.ORG.RU

Почему браузер начинает считывать данные после подключения?

 


0

1

День добрый. Тернируюсь - пишу асинхронный сервер на select.

Вишу я в select, далее браузером или telnet'ом подключаюсь к серверу и после подключения мое новое подключение не в read_fd_set, а в write_fd_set

if (select(FD_SETSIZE, &t_read_fd_set, &t_write_fd_set, NULL, NULL) < 0)
{
	printf("Can't select\n");
	return false;
}

Т.е. я подключился telnet'ом, но ничего не записал, accept отработал, это не он. Вот я ничего не записал и сработал select, и какого-то черта мой сокет во write_fd_set. Это же значит что мне туда что-то записать надо? Или что это значит? Кто-нибудь знает что происходит и что мне делать?

Мои мысли что так просто не выйдет нихера и надо читать что-нибудь тяжелое. Однака хотелось бы услышать ответ на мой вопрос.

Заранее спасибо.



Последнее исправление: facelift (всего исправлений: 1)

Это же значит что мне туда что-то записать надо?

Это значит, что вам туда записать _можно_, но если вы не запишете, то за вами не приедут.

Sorcerer ★★★★★
()
Ответ на: комментарий от facelift

Когда вы передаёте дескриптор в select во write_fd_set, вы тем самым сообщаете ОС, что хотите в этот дескриптор что-то записать. И вот, когда вам ОС отвечает, что писать можно, вы вдруг пугаетесь? :)

Sorcerer ★★★★★
()
Последнее исправление: Sorcerer (всего исправлений: 1)
Ответ на: комментарий от Sorcerer

Но тут проблема. Тогда я не задаю write_fd_set, ставлю туда NULL, и вот когда я это делаю иногда select не срабатывает, хотя я посылаю данные. А иногда read срабатывает без write.

facelift
() автор топика
Ответ на: комментарий от anonymous

Да я просто поковырять хотел select этот. Чета жесть какая-то. Ща буду epoll в виртуалке пробовать.

facelift
() автор топика
Ответ на: комментарий от anonymous

потому что тренируется. Ну и + select как-никак куда-то перенсти можно в отличие от poll. Можно еще libevent кста.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.