Создание Серверного Сокета

sasha465

Well-Known Member
29.03.2009
69
0
#1
Помггите пожалуйста разобраться и найти ошибку при создании серверного сокета. Вообщем функция bind возвращает значение -1, то есть завершается с ошибкой вот собсно код:
C++:
static struct sockaddr_in SrvAddr;
struct sockaddr_in ConnectAddr;
static SOCKET SrvSock, sockio;
WSADATA wsa;
WORD wVersion;
..............................

wVersion=MAKEWORD(2,0);
WSAStartup(wVersion,&wsa);
SrvSock=socket(AF_INET,SOCK_STREAM,0);
if (SrvSock == -1)
MessageBox(hWnd,L"couldn't create a socket",L"message",MB_OK); // здесь ошибки не выдает
memset ((char *)&SrvAddr, '\0', sizeof(SrvAddr)); 
SrvAddr.sin_family=AF_INET;
SrvAddr.sin_port=htons(1026);
SrvAddr.sin_addr.S_un.S_addr=0;														// если сюда вставить INADDR_ANY или htonl(INADDR_ANY) ничего не изменится
if(bind(SrvSock,(sockaddr*) &SrvAddr, sizeof(SrvAddr)))
MessageBox(hWnd,L"error",L"message",MB_OK);						  // а вот это сообщение об ошибки срабатывает
listen(SrvSock,5);
Addrlen=sizeof(ConnectAddr);
sockio=accept(SrvSock, (SOCKADDR*) &ConnectAddr,&Addrlen);
shutdown(sockio,2);
closesocket(sockio);
Вроде все должно быть элементарно, а не работает. Где же ошибка?
 

rlib

New Member
25.04.2012
1
0
#2
Во-первых, кто мешает посмотреть ошибку, возвращаемую бинд(). Проверь точно, что не так.
Во-вторых. причина может быть (1) имеется процесс, который уже бежит на выбраном тобой порту; попробую юзануть 63000 например, вместо 1026 (2) файрфол виндосовский блокирует твою апликацию - выруби его нафег.

Помггите пожалуйста разобраться и найти ошибку при создании серверного сокета. Вообщем функция bind возвращает значение -1, то есть завершается с ошибкой вот собсно код:
C++:
static struct sockaddr_in SrvAddr;
struct sockaddr_in ConnectAddr;
static SOCKET SrvSock, sockio;
WSADATA wsa;
WORD wVersion;
..............................

wVersion=MAKEWORD(2,0);
WSAStartup(wVersion,&wsa);
SrvSock=socket(AF_INET,SOCK_STREAM,0);
if (SrvSock == -1)
MessageBox(hWnd,L"couldn't create a socket",L"message",MB_OK); // здесь ошибки не выдает
memset ((char *)&SrvAddr, '\0', sizeof(SrvAddr)); 
SrvAddr.sin_family=AF_INET;
SrvAddr.sin_port=htons(1026);
SrvAddr.sin_addr.S_un.S_addr=0;														// если сюда вставить INADDR_ANY или htonl(INADDR_ANY) ничего не изменится
if(bind(SrvSock,(sockaddr*) &SrvAddr, sizeof(SrvAddr)))
MessageBox(hWnd,L"error",L"message",MB_OK);						  // а вот это сообщение об ошибки срабатывает
listen(SrvSock,5);
Addrlen=sizeof(ConnectAddr);
sockio=accept(SrvSock, (SOCKADDR*) &ConnectAddr,&Addrlen);
shutdown(sockio,2);
closesocket(sockio);
Вроде все должно быть элементарно, а не работает. Где же ошибка?