Problem z socketami

0

Czolem. Mam pewnien problem z programem który pisze, a mianowicie umieszczene w pętli polecenia recv powoduje mi 100% obciazenie procka dodam ze pracuje na win xp.
//
SOCKET client,SH;
sockaddr_in Sok,Sok1;
u_long aa,bb;
WSAData WSA;
char B[500];
int clientz[10];
int Sz;
int u;
(...)
Sok.sin_family=AF_INET;
Sok.sin_port=htons(80);
Sok.sin_addr.s_addr=inet_addr("0.0.0.0");
//
WSAStartup(MAKEWORD(1,1),&WSA);
//
SH = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//
bind(SH,(sockaddr*)&Sok,sizeof(Sok));
listen(SH,8);
//
u_long Arg=1;

Sz = sizeof(Sok1);

ioctlsocket(SH,FIONBIO,&Arg);
//
int i;
while (true)
{
client = accept(SH,(sockaddr*)&Sok,&Sz);
if (client!=INVALID_SOCKET)
{
clientz[u]=client;
u++;
}
for (int i=0;i<=u;i++)
{
recv(clientz[i],B,sizeof(B),1);
}
}

WSACleanup();

Jesli mozecie pomozcie mi.

0

byc moze wystepuje buffer overflow(program dostaje wiecej danych niz jest w stanie przyjac)
sprawdz jaki jest rozmiar otrzymywanych pakietow (cout<<recv())

0

Spróbuj w taki sposób:

char* wsk=B;
int d;
while ((d=recv(clientz[i],wsk,sizeof(B)-(wsk-B),1))>0)wsk+=d;

1 ?? co to za flaga ? nie powinno byc 0 ?

0

1 ?? co to za flaga ? nie powinno byc 0 ?

To przez pomylke :D.
Co do tego co podales to niestety nic nowego nie wnioslo dalej 100% :/

0

He he he :/ Wystarczylo dac Sleep(1); w petli i juz pieknie dziala : P Ale i tak dzieki : P

0

Po oc ustawiles socket w tryb nieblokujacy ?

u_long Arg=1;
                                              
Sz = sizeof(Sok1);

ioctlsocket(SH,FIONBIO,&Arg);

wywal to , wyawl sleepa i teraz recv zatrzyma jesli bufory sa puste, procek bedzie wolny, a dane jak tylko sie pojawia zostana odebrane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1