|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Andrey S. Chistyacov 2:5020/400 10 Mar 2001 14:49:01 To : All Subject : Re: Microsoft предлагает запретить Linux!!! -------------------------------------------------------------------------------- Vladimir Butenko <butenko@stalker.com> пишет в сообщении:98al81$34b$1@news.gamma.ru... > > A.N.Kuznetsov <kuznet@ms2.inr.ac.ru> wrote in message > news:9863pv$c2l@minus.inr.ac.ru... > > Vladimir Butenko (butenko@stalker.com) wrote: > > [Много поскипано] > STErrorCode STWriteToSocket(STSocket theSocket,const void* pData,size_t [Write тоже поскипано] > } > > Это у нас Read (лишнее почикано) > > 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); Дядя Вова, а зачем вообще селект, насколько я понимаю ( неправ наверное ), селект предназначался для работы _однопоточных_ программ с несколькими соккетами. Здесь по-моему не тот случай. Кроме того, не исключено, что в селекте тот-же глюк, что был в свое время в winsock, то есть если пришли данные мы получили селектом информацию об этом, пошли читать, а пока прочитали, вернулись по циклу до селекта, пришел еще пакетик, но селект не вчухал, и продрлжает ждать еще пакетика, а его нету, он уже в буфере лежит... Hу, эта, посмотреть реализацию селекта мне было естествено влом, а словами покидаться - пожалуйста ;) Андрей PS. А на письмо по поводу вакансий надо было-бы ответить хотя-бы в виде HЕТ. А то всякие мысли рождаются, что CGP просто сжевал письмецо ;) > } while(retCode == -1 && errno == STInterruptERRNO); > if(!FD_ISSET(theSocket,&fdset)) return(STSocketReadingTimeoutError); > retCode = recv(theSocket,(char*)pBuffer,lBuffer,0); > } while(retCode == -1 && errno == STInterruptERRNO); > [ поскипано до безобразия много] > > Alexey > > Вова > > --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.linux/65775d4f5c7d.html, оценка из 5, голосов 10
|