|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Vladimir Butenko 2:5020/400 10 Mar 2001 19:42:02 To : All Subject : Re: Microsoft предлагает запретить Linux!!! -------------------------------------------------------------------------------- Andrey S. Chistyacov <andrey@chis.nnov.ru> wrote in message news:98d0pg$2n3$1@ddt.demos.su... > > STErrorCode STReadFromSocket(STSocket theSocket,void* pBuffer,size_t > > lBuffer,int timeoutInSeconds,size_t* gotBytes) { > > int retCode; > > *gotBytes = 0; > > #if defined(UseSelect) > > struct timeval timeOut; > > timeOut.tv_sec = timeoutInSeconds; timeOut.tv_usec = 0; > > #if defined(unix) || defined(OS_400) > > if(theSocket >= FD_SETSIZE-2) { > > STLog("too many streams: cannot 'select' socket #%d",theSocket); > > return(TooManyStreamsError); > > } > > #endif > > do { > > fd_set fdset; > > do { > > FD_ZERO(&fdset); FD_SET(theSocket, &fdset); > > retCode = select(theSocket+1,&fdset,NIL,NIL,&timeOut); > > Дядя Вова, а зачем вообще селект, насколько я понимаю ( неправ наверное ), > селект предназначался для работы _однопоточных_ программ с несколькими > соккетами. Здесь по-моему не тот случай. Вы флажки красные видели - defined(USESELECT)? Вот Вам из того же файла, из начала: #if defined(WIN32) //#define FD_SETSIZE 64 // there is no need to increase this, since it is used for poll() type operations only #define UseSelect #elif defined(mach) || defined(darwin) || \ defined(__OpenBSD__) || defined(__bsdi__) || \ defined(__OS400__) || defined(__BEOS__) // since OS_XXX is not seen here // defined (__FreeBSD__) #define UseSelect #define FD_SETSIZE 2048 #else #include <poll.h> #define UsePoll #endif Об"яснять, что в перечисленных платформах - poll() просто не существует-не работает. А в виндах - select() - это на самом деле poll(). Вот FreeBSD, наконец, удосужился poll() поддерживать. > Кроме того, не исключено, что в > селекте тот-же глюк, что был в свое время в winsock, то есть если пришли > данные мы получили селектом информацию об этом, пошли читать, а пока > прочитали, вернулись по циклу до селекта, пришел еще пакетик, но селект > не вчухал, и продрлжает ждать еще пакетика, а его нету, он уже в буфере > лежит... Это в каком таком winsock была такая ошибка? В WinSock2 - ее точно нет и не было. Потому что если бы было - ничего бы не работало, это бы еще хуже Линуха было. > Hу, эта, посмотреть реализацию селекта мне было естествено влом, > а словами покидаться - пожалуйста ;) Где - в Виндах? Там select() - это нормальный poll() - то есть список сокетов, а отнюдь не битовая гребенка. > Андрей > > PS. А на письмо по поводу вакансий надо было-бы ответить хотя-бы в виде > HЕТ. А то всякие мысли рождаются, что CGP просто сжевал письмецо ;) Я регулярно получаю какие-то письма из России, где развязным тоном говорится о том, что вот, "я такой крутой, что могу снизойти до того, чтоб на вас там поработать". Такие письма я стираю, не дочитывая до конца. Почему - об"яснять? Если ответа не было - значит, Ваше было из таких писем. Если в письме не было резюме - то о каком ответе Вы мечтаете? Тем более сейчас, когда волна прошла, и безработных программистов тут можно будет пачками на улицах подбирать. Вова --- ifmail v.2.15dev5 * Origin: Gamma NNTP server Moscow Russia (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.linux/7591d1523773.html, оценка из 5, голосов 10
|