[W2k/NT] WSAGetLastError()==183 ??????????????????
От: KMiNT21 Украина http://kmint21.info/ru/
Дата: 28.03.02 12:55
Оценка:
Hi!
Где-то год назад (примено) я разбирался с этой проблемой, но так и не разобрался.
Получилось толкько "коряво" выкрутиться — поставил тупой цикл, и оно аж c XX-й
попытки "прокатывало". Теперь снова разбираюсь, но тот вариант "меня устал".
Хочу по-уму сделать, а то подвисания страшные начинаются.
Прога — одноконнектный port-mapper.

Вобщем, вот тот текст, который я давно на форумы постил. Никто так и не нашел причину.
Чуть ниже сегодняшние дополнения.

========================
Вот примерный код.
Есть сокет — неблокирующий, привязанный до окна.
По прибытию соотв. мессаги (типа WM_ASYNC_CLIENTEVENT) идет
"case FD_READ:"
и

j=send(currentsock,buf, i, 0);
Если SOCKET_ERROR==j,
достаем код ошибки строкой
Err = WSAGetLastError();

Обычно код ошибки бывает такого типа —

"WSAECONNRESET (10054)" т.е. сам код — 10054
База — 10000, а 54 — конкретная ошибка.

Но у меня (Win2k, NT4) код ошибки возващает такой — 183. И бывает это
не часто. Редко, но метко. И коннекты потом повисают в воздухе.
Т.е. из другой области. Единственный файл, где можно встретить что-то
подходящее, это "error.h" (MVV 6.0) Там такая строка —
"#define ERROR_ALREADY_EXISTS 183"
Что-то я не совсем понимаю происходящего. Что бы это значило ?
От проблемы-то я избавился (но некорректно) — просто в цикле повторяю
send, пока ошибка не пропадет — вроде работает теперь.
===============================================================================

Это было тогда.
А сейчас я сделал буффер для приема в 10 байт и это проблема стала проявляться
как на дрожжах. Тогда я уже понял, что эта ошибка означает что-то вроде перегрузки сети, так как заметил я ее только на NT и 2000, имеющих неск. и-фейсов и работающик
как роутеры. А вот дома под 95 — все отлично.
KMiNT21' Blog
http://kmint21.info/ru/
Re: [W2k/NT] WSAGetLastError()==183 ?
От: KMiNT21 Украина http://kmint21.info/ru/
Дата: 29.03.02 08:12
Оценка:
Ни у кого нету идей?
KMiNT21' Blog
http://kmint21.info/ru/
Re: [W2k/NT] WSAGetLastError()==183 ??????????????????
От: Аноним  
Дата: 08.04.02 10:02
Оценка:
Здравствуйте KMiNT21, Вы писали:

KMNT>Т.е. из другой области. Единственный файл, где можно встретить что-то

KMNT>подходящее, это "error.h" (MVV 6.0) Там такая строка -
KMNT>"#define ERROR_ALREADY_EXISTS 183"
KMNT>Что-то я не совсем понимаю происходящего. Что бы это значило ?
Может это ?
183 Cannot create a file when that file already exists. ERROR_ALREADY_EXISTS
Re: [W2k/NT] WSAGetLastError()==183 ??????????????????
От: Gabber Россия  
Дата: 10.04.03 13:07
Оценка:
Здравствуйте, KMiNT21, Вы писали:

KMN>Hi!

KMN>Где-то год назад (примено) я разбирался с этой проблемой, но так и не разобрался.
KMN>Получилось толкько "коряво" выкрутиться — поставил тупой цикл, и оно аж c XX-й
KMN>попытки "прокатывало". Теперь снова разбираюсь, но тот вариант "меня устал".
KMN>Хочу по-уму сделать, а то подвисания страшные начинаются.
KMN>Прога — одноконнектный port-mapper.

KMN>Вобщем, вот тот текст, который я давно на форумы постил. Никто так и не нашел причину.

KMN>Чуть ниже сегодняшние дополнения.

KMN>========================

KMN>Вот примерный код.
KMN>Есть сокет — неблокирующий, привязанный до окна.
KMN>По прибытию соотв. мессаги (типа WM_ASYNC_CLIENTEVENT) идет
KMN>"case FD_READ:"
KMN>и

KMN>j=send(currentsock,buf, i, 0);

KMN>Если SOCKET_ERROR==j,
KMN>достаем код ошибки строкой
KMN>Err = WSAGetLastError();

KMN>Обычно код ошибки бывает такого типа -


KMN>"WSAECONNRESET (10054)" т.е. сам код — 10054

KMN>База — 10000, а 54 — конкретная ошибка.

KMN>Но у меня (Win2k, NT4) код ошибки возващает такой — 183. И бывает это

KMN>не часто. Редко, но метко. И коннекты потом повисают в воздухе.
KMN>Т.е. из другой области. Единственный файл, где можно встретить что-то
KMN>подходящее, это "error.h" (MVV 6.0) Там такая строка -
KMN>"#define ERROR_ALREADY_EXISTS 183"
KMN>Что-то я не совсем понимаю происходящего. Что бы это значило ?
KMN>От проблемы-то я избавился (но некорректно) — просто в цикле повторяю
KMN>send, пока ошибка не пропадет — вроде работает теперь.
KMN>===============================================================================

KMN>Это было тогда.

KMN>А сейчас я сделал буффер для приема в 10 байт и это проблема стала проявляться
KMN>как на дрожжах. Тогда я уже понял, что эта ошибка означает что-то вроде перегрузки сети, так как заметил я ее только на NT и 2000, имеющих неск. и-фейсов и работающик
KMN>как роутеры. А вот дома под 95 — все отлично.

Проблема в том, что у тебя до вызова WSAGetLastError происходит какая-то дисковая операция (например ты в лог что-то пишешь или еще что-то) она и забивает код ошибки.
j = send (...);
if (j == SOCKET_ERROR)
{
// происходит вызов дисковых ф-ий который забивает оишбку
Err = WSAGetLastError ();
}

Это точно решит твою проблему — сам с таким сталкивался

Gabber
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.