Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Код ошибки bind (socket)

6.9K
01 июня 2006 года
RZ_RZ
53 / / 09.06.2005
Здрасте спецы, есть программа сервер, просто слушает и выводит на экр сообщение при попытке коннекта.
Делаю так:
Код:
...
WSAStartup(...);
...
socket (...);
...
iret = 0;
WSASetLastError(0);
if ( bind(listensock,(LPSOCKADDR)&addr, sizeof(struct sockaddr)) )
{
    iret = WSAGetLastError();
    if ( iret == WSANOTINITIALISED ) Log.Write(TEXT("..."));
    if ( iret == WSAENETDOWN ) Log.Write(TEXT("..."));
    if ( iret == WSAEADDRINUSE ) Log.Write(TEXT("..."));
    if ( iret == WSAEADDRNOTAVAIL ) Log.Write(TEXT("..."));
    if ( iret == WSAEFAULT ) Log.Write(TEXT("..."));
    if ( iret == WSAEINPROGRESS ) Log.Write(TEXT("..."));
    if ( iret == WSAEINVAL ) Log.Write(TEXT("..."));
    if ( iret == WSAENOBUFS ) Log.Write(TEXT("..."));
    if ( iret == WSAENOTSOCK ) Log.Write(TEXT("..."));
}

Все работает НО!
Решил проверить и запустил похожую программу, которая тоже слушает на порту 9000 (короче занял порт 9000).
При запуске моей проги bind возвращает не 0, проверяю че за ош. с пом WSAGetLastError(); но она мне возвращает "183" а все константы-макросы (WSANOTINITIALISED и т. д.) описаны так
#define WSANOTINITIALISED (WSABASEERR+93) а
WSABASEERR описан так
#define WSABASEERR 10000
т. е. ошибка должна быть по любому больше 10000 а она у меня 183.
Если порт 9000 не занят то все работает нормально.

Подскажите че это за ош. такая, или чета я неправильно мож делаю.
Заранее спасибо.
P. S.
VC 6
ws2_32.lib
6.9K
01 июня 2006 года
RZ_RZ
53 / / 09.06.2005
Цитата:
Originally posted by RZ_RZ
Здрасте спецы, есть программа сервер, просто слушает и выводит на экр сообщение при попытке коннекта.
Делаю так:
Код:
...
WSAStartup(...);
...
socket (...);
...
iret = 0;
WSASetLastError(0);
if ( bind(listensock,(LPSOCKADDR)&addr, sizeof(struct sockaddr)) )
{
    iret = WSAGetLastError();
    if ( iret == WSANOTINITIALISED ) Log.Write(TEXT("..."));
    if ( iret == WSAENETDOWN ) Log.Write(TEXT("..."));
    if ( iret == WSAEADDRINUSE ) Log.Write(TEXT("..."));
    if ( iret == WSAEADDRNOTAVAIL ) Log.Write(TEXT("..."));
    if ( iret == WSAEFAULT ) Log.Write(TEXT("..."));
    if ( iret == WSAEINPROGRESS ) Log.Write(TEXT("..."));
    if ( iret == WSAEINVAL ) Log.Write(TEXT("..."));
    if ( iret == WSAENOBUFS ) Log.Write(TEXT("..."));
    if ( iret == WSAENOTSOCK ) Log.Write(TEXT("..."));
}

Все работает НО!
Решил проверить и запустил похожую программу, которая тоже слушает на порту 9000 (короче занял порт 9000).
При запуске моей проги bind возвращает не 0, проверяю че за ош. с пом WSAGetLastError(); но она мне возвращает "183" а все константы-макросы (WSANOTINITIALISED и т. д.) описаны так
#define WSANOTINITIALISED (WSABASEERR+93) а
WSABASEERR описан так
#define WSABASEERR 10000
т. е. ошибка должна быть по любому больше 10000 а она у меня 183.
Если порт 9000 не занят то все работает нормально.

Подскажите че это за ош. такая, или чета я неправильно мож делаю.
Заранее спасибо.
P. S.
VC 6
ws2_32.lib


Разобрался, каюсь, не полностью привел код
перед
iret = WSAGetLastError();
была еще одна строчка (пишет лог), ее поставил после
iret = WSAGetLastError();
и все заработало как надо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог