[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/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.