This page contains the following errors:
error on line 2 at column 2: StartTag: invalid element name
Below is a rendering of the page up to the first error.
К сожалению да. Все действительно очень сложно.
В твоем примере конечно можно обойтись select/poll/epoll, как уже советовали, но представь более общую задачу.
Исходя из моего опыта, в UNIX вообще сложно с ограничением времени выполнения произвольных операций (хотя бы просто системных вызовов).
Ну например ты форкаешь из одного процесса N потомков, для каждого из которых задан свой таймаут, за который он должен завершиться.
Если не завершился, то потомка нужно убить.
Попробуй надежно реализовать такую схему. Узнаешь много интересного :)
> int t = select(sock,&fds,NULL,NULL,&tv);
> if (t) return recv(sock,buf,len,0);
Семееен Семеееныч...
1) tv.tv_sec = milliseconds % 1000; Ибо кто знает, что юзеру в голову придёт. Может, он не готов к такой засаде.
2) «nfds is the highest-numbered file descriptor in any of the three sets, plus 1» (c) man
3) А если select() вернет ошибку?