Napisałem nieblokujący serwer ale nie odbiera mi danych. Moglibyście wskazać gdzie popełniam błąd?
#include<WinSock.h>
#include<conio.h>
#include<stdio.h>
#pragma comment(lib, "Ws2_32.lib")
int main()
{
WSADATA wsa;
int Blad;
SOCKET G[10];
Blad=WSAStartup(MAKEWORD(2,2), &wsa);
if(Blad!=0)
{
printf("Blad Inicjalizacji biblioteki");
_getch();
return 0;
}
SOCKET Gniazdo;
Gniazdo=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(Gniazdo==-1)
{
printf("Blad tworzenia Gniazda");
_getch();
return 0;
}
sockaddr_in Sin; // Mój
Sin.sin_addr.s_addr=inet_addr("127.0.0.1");
Sin.sin_family=AF_INET;
Sin.sin_port=htons(20000);
Blad=bind(Gniazdo, (sockaddr*) &Sin, sizeof(Sin));
if(Blad<0)
{
printf("Bind nieudany\n");
_getch();
return 0;
}
sockaddr_in Klient; //Klienta
printf("Nasluchiwanie\n");
Blad=listen(Gniazdo,10);
if(Blad!=0){
printf("Blad listen");
_getch();
return 0;
}
fd_set Fset;
fd_set Fs;
FD_ZERO(&Fset);
FD_SET(Gniazdo, &Fset);
timeval T;
u_long val=1;
ioctlsocket(Gniazdo, FIONBIO, &val); // inicjalizacja trybu nieblokującego
T.tv_sec=2;
T.tv_usec=40000;
int RozmiarKlienta=sizeof(Klient);
int DeskryptorGniazda;
char bufor[30]={0};
for(;;)
{
Fs=Fset;
if(select(0,&Fs, NULL, NULL, &T)<0)
{
printf("Blad select\n");
_getch();
return 0;
}
for(int i=0;i<10;i++)
{
if(FD_ISSET(i,&Fs))
{
if( i == Gniazdo )
{
if(DeskryptorGniazda=accept(Gniazdo,(struct sockaddr*)&Klient,&RozmiarKlienta)==-1)
{
perror( "accept" );
}
else
{
FD_SET(DeskryptorGniazda, &Fset); // dodaj do głównego zestawu
printf( "Nowe polaczenie z %s on socket %d\n", inet_ntoa( Klient.sin_addr ), DeskryptorGniazda);
}
}
}
else
{
Blad=recv(i,bufor,sizeof(bufor),0);
if(Blad<0)
{
printf("Blad odbioru 1\n");
_getch();
}
FD_CLR(i,&Fset);
}
}
}
closesocket(Gniazdo);
WSACleanup();
return 0;
}