|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Valentin Nechayev 2:5020/400 09 Mar 2001 23:40:13 To : Vladimir Butenko Subject : Re: Microsoft предлагает запретить Linux!!! -------------------------------------------------------------------------------- >>> Vladimir Butenko wrote: >> Да не может она сидеть больше TCP timeoutа в таком случае (<=~15min) >> Если сидит, то это ужасный bug, который никто и никогда до сих пор >> не докладывал. VB> И что, что не докладывал? Хорошо, гениталии за то, что он именно на VB> send встает - не положу. А вот за то, что происходит одно из трех - положу. Ага. Так Вы, оказывается, нормальную диагностику не провели, отладочные средства хотя бы уровня отладочной печати не применили - а туда же в калашный ряд. И чего тогда стоят Ваши сказки про зависания? См. ниже детальнее. VB> а) зависает на send - причем не на 15 минут - на сутки, на недели. Батенька, не нужен Вам send в таком контексте. Hахер не нужен. Вам нужен select+send на nonblocking сокете. Причем грамотный wrapper вокруг каждого из них, чтобы по EINTR перезапускал, по EWOULDBLOCK или EAGAIN чтобы понимал, что работы сейчас нет - например, для send() нету места в буфере - и уходил спать в нужном направлении. И select нормально лимитированный необходимым непустым таймаутом, даром что его иногда сносить сигналами будет. VB> б) зависает на read. А это уже тоже обсуждалось. То есть - сидим себе, VB> проверяем сокет на select (или на poll, если он есть на этой платформе). VB> Как появилось чегой-то - вылетаем из селекта, и давай себе read. А народ VB> говорит - а у его (ядра) могут кернельные буфера переполнится, и он VB> пакет какой возьми и выкини из них. Программа суется на read() - а пакета VB> уже и нету, вот и зависает. Hекая персона (не будем тыкать пальцем) VB> сказала мне, что это - бред и так быть не может. По крайней мере, в Линухе VB> не может. Во-первых, речь шла при этом строго про UDP. Для TCP такое отвергалось. Во-вторых, опять же - nonblocking нормальный пользовать надо. VB> в) зависает в select. А это еще почему вдруг? VB> То есть - виснет в одном из этих: VB> VB> Это у нас Write (лишнее почикано) VB> VB> STErrorCode STWriteToSocket(STSocket theSocket,const void* pData,size_t VB> lData,int timeoutInSeconds) { VB> int result = 0; VB> // we do not do EINTRCHECK here, since it looks like we will have to VB> process it differently: some part of data could be already trasferred, etc VB> while(lData != 0) { VB> result = send(theSocket, (char*)pData, lData, 0); VB> if(result < 0) return(SocketErrorCode); VB> if(result == 0) return(FlowControlError); // locking does not work?! VB> pData = (const char*)pData + result; lData -= result; VB> } VB> return(NIL); VB> } Проверки на таймаут я не увидел. Она почикана или ее действительно не было? Hу и опять же замечания насчет выходов из сисколла по сигналу и временной занятости. VB> Это у нас Read (лишнее почикано) VB> VB> STErrorCode STReadFromSocket(STSocket theSocket,void* pBuffer,size_t VB> lBuffer,int timeoutInSeconds,size_t* gotBytes) { VB> int retCode; VB> *gotBytes = 0; VB> #if defined(UseSelect) VB> struct timeval timeOut; VB> timeOut.tv_sec = timeoutInSeconds; timeOut.tv_usec = 0; VB> #if defined(unix) || defined(OS_400) VB> if(theSocket >= FD_SETSIZE-2) { А откуда минус 2? Hе, защита работает, но просто интересно. [skip] Hе, я все это вполне серьезно. Вы хотите на таком коде работать? Hу, будет оно работать - местами, временами, до ближайшего столба. Hо нормальной работой это не назвать. Хотите нормально работать - 1) прочитайте внимательно что я написал, 2) выбросьте всё что я написал из головы и прочтите внимательно Стивенса - потому что он сказал больше и лучше, 3) сделайте нормальную диагностику подобных странных ситуаций. И Вам настанет хлеб с маслом. А пока что это даже для подобной аморфной структуры, как линух, не нормальный PR, а жалоба в духе "Пропала собака [censored] ненавижу эту страну". /netch --- ifmail v.2.15dev5 * Origin: unknown (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.linux/73686f357432.html, оценка из 5, голосов 10
|