Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
recv() ? 24.07.02 10:35 Число просмотров: 912
Автор: ukv Статус: Незарегистрированный пользователь
|
Есть подозрение на это место:
> while (( rc=recv(lpc->Socket,buf,MAX_BUF_LEN, 0)) > > -1 ) { > анализируем полученное > } >
recv может возвращать и ноль (при нормальном закрытии соединения с другой стороны) - этот случай обрабатывается?
|
<programming>
|
[C++] Как отлавливать дохлые сокеты 24.07.02 04:02
Автор: [H] Статус: Незарегистрированный пользователь
|
написал тут класик mconnection принцип работы вот:
mconnection::mconnection(...) {
создаем поток в который в кач. параметра передаем ссылку "на это"=) - на себя
hThread=CreateThread (NULL, 0, ConnectionThreadFunc, this, 0, &ThreadId);
}
воть
DWORD APIENTRY ConnectionThreadFunc(void* lpParam) {
- назначение которой читать параметр обьекта lPParam (мы туда кинули ссылку на это) .Socket
#def lpc (mconnection*)lpParam
- okay воть:
while (( rc=recv(lpc->Socket,buf,MAX_BUF_LEN, 0)) > -1 ) {
анализируем полученное
}
закрываем
delete(lpc);
#undef..
и деструктор
mconnection::~mconnection() {
закрываем сокет
шут сокет
клозесокет сокет
}
дело все в том что иногда потоки зависают на recv и не удаляются когда клиенты вроде как отключились(программа-клиент закрылась). в качестве клиентов использовались FTP-клиент "встроенный" в IE и несколько других....
помоему PING не решение проблемы....да и как, если отправка/прием байта может логически все испортиль
да и тайм-аут-проки тоже не хочется вводить
да. и взаимосвязь с WNDPROC'ами тоже не хочется вводить.мне эта концепция не нравится (может там таких трабл и нет.)
как быть?
|
|
recv() ? 24.07.02 10:35
Автор: ukv Статус: Незарегистрированный пользователь
|
Есть подозрение на это место:
> while (( rc=recv(lpc->Socket,buf,MAX_BUF_LEN, 0)) > > -1 ) { > анализируем полученное > } >
recv может возвращать и ноль (при нормальном закрытии соединения с другой стороны) - этот случай обрабатывается?
|
| |
да не в этом дело.....тут что то принципиальное 25.07.02 02:38
Автор: [H] Статус: Незарегистрированный пользователь
|
> Есть подозрение на это место: > > > while (( rc=recv(lpc->Socket,buf,MAX_BUF_LEN, 0)) > > > > -1 ) { > > анализируем полученное > > } > > > > recv может возвращать и ноль (при нормальном закрытии > соединения с другой стороны) - этот случай обрабатывается?
да случай ноль обрабытывается внутри стоит
....
switch (rc) {
case 0:
goto closethread; // там закрываются сокет
....
при нормальных та все пашет....а при экстремальных нагрузоках и большомо пинге поток иногда не закрывается..
|
|
|