The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Первый многопользовательский серевер с использованием epoll(..."
Отправлено BigHO, 13-Дек-09 16:12 
>    if ( event & EPOLLIN ) {
>     /* сокет готов для чтения */
>     printf("descriptor %d ready for read\n", sock_fd);
>     char buff[32] = "\0";

тут не надо инициализации буфера как "\0" - все равно перезапишется.

>     int rd = read(sock_fd, &buff, sizeof(buff));

вызов read принимает вторым аргументом не указатель-на-указатель, а указатель на буфер - он же никуда его двигать не собирается: просто запихнуть в буфер что-то.

тобишь будет строка как:
int rd = read(sock_fd, buff, sizeof(buff));

>     fprintf(stderr, "%s\n", buff);
>    }
>    if ( event & EPOLLOUT ) {
>     /* сокет готов для записи */
>     printf("descriptor %d ready for write\n", sock_fd);

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

>    }

<кусь> - ибо неважно

>    if ( event & EPOLLERR ) {
>     /* какая-то ошибка произошла на сокете. так?
>
>      * какие ошибки могут происходить? и
>почему?
>      */

наиболее суперская ошибка - "ошибочная ошибка - никаких ошибок нет", или "превышено число допустимых ошибок", можно поймать в винде - хто его знает какие еще хитроумные сплетения возможны. Но наиболее часто имеется в виду ошибка по потоку, например, если нечего больше мониторить - поток закрылся, разорвалось соединение (характено для SOCK_STREAM - TCP). Или какая-то часть кода не хочет мира во всем мире и злономерено закрыла исходный код дескриптор, посчитав, что номер 666 будет смотреться лучше, чем 13 (close, dup, dup2).

Это же относится к EPOLLHUP и прочих непонятностей - не хочется лезть в хэндбук.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру