...
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("..."));
}
Код ошибки bind (socket)
Делаю так:
Код:
Все работает НО!
Решил проверить и запустил похожую программу, которая тоже слушает на порту 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
Цитата:
Originally posted by RZ_RZ
Здрасте спецы, есть программа сервер, просто слушает и выводит на экр сообщение при попытке коннекта.
Делаю так:
Все работает НО!
Решил проверить и запустил похожую программу, которая тоже слушает на порту 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
Здрасте спецы, есть программа сервер, просто слушает и выводит на экр сообщение при попытке коннекта.
Делаю так:
Код:
...
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("..."));
}
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();
и все заработало как надо.