-
Data: 2017-12-08 18:13:20
Temat: Re: from blocking to nonblocking server
Od: fir <p...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu piątek, 8 grudnia 2017 17:58:37 UTC+1 użytkownik fir napisał:
> W dniu piątek, 8 grudnia 2017 09:30:30 UTC+1 użytkownik Roman Tyczka napisał:
> > On Tue, 5 Dec 2017 14:46:44 -0800 (PST), fir wrote:
> >
> > > W dniu wtorek, 5 grudnia 2017 17:32:33 UTC+1 użytkownik fir napisał:
> > > moge dodac ze to chyba dziala ok
> > > - za to przelaczenie connecta w
> > > kliencie na nie-blokujacy chyba nie da sie tak prosto zrobic a nie
> > > moge nigdzie w google znalezc gotowego kodu jak to zrobic
> > > (a czytac o tym kilka/nascie/dziesiat godzin nie mam jakos checi bo to straszne
> > > smieci)
> >
> > Czemu po prostu nie użyjesz jakieś open sourcowej biblioteki, która to
> > załatwi od strzału? Zwłaszcza jeśli czujesz się cienki w socketach i tcp.
> >
> nie lubie dependencji, nie czuje sie cienki w socketach tylko nie mam znimi
doswiadczenia (tak jak wczesniej np z formatem PE),
> posiedzialem 3 dni i teraz czuje w zasadzie sockety mam
> mw tak samo opanowane jak uzywanie fopen/fclose/(fwrtie/fgetc etc)
>
> osiagnalem socketowe zen i jestem zadowolony
>
> (troche oczywisccie jeszze mozna by doczytac ale ogolnei dziala.. problem byl
raczej z tymz e tutoriale sa zle napisne a same to api jest tez co nieco brzydkie)
nawiasdem mowiac ten kawalek
do 'nieblokujacego' (troche wyglada raczej jak blokujacy tylko z ustawialnym
timeoutem)
znalezniony w necie
int WaitForServerConnectionUnblocked()
{
u_long no_block=1;
ioctlsocket(clientSock,FIONBIO,&no_block);
//connect to the server
// iResult = connect(client, (sockaddr*)&server, sizeof(server));
int retVal = connect(clientSock,(LPSOCKADDR)&serverInfo, sizeof(serverInfo));
if( retVal == SOCKET_ERROR)
{
int iError = WSAGetLastError();
//check if error was WSAEWOULDBLOCK, where we'll wait
if(iError == WSAEWOULDBLOCK)
{
/// cout << "Attempting to connect.\n";
fd_set Write, Err;
TIMEVAL Timeout;
FD_ZERO(&Write);
FD_ZERO(&Err);
FD_SET(clientSock, &Write);
FD_SET(clientSock, &Err);
Timeout.tv_sec = 0;
Timeout.tv_usec = 30*1000;
int iResult = select(0, NULL, &Write, &Err, &Timeout);
if(iResult == 0)
{
// cout << "Connect Timeout (" << TimeoutSec << " Sec).\n";
return 0;
}
else
{
if(FD_ISSET(clientSock, &Write))
{
// cout << "Connected!\n";
return 1;
}
if(FD_ISSET(clientSock, &Err))
{
// cout << "Select error.\n";
return 0;
}
}
}
else
{
// cout << "Failed to connect to server.\n";
// cout << "Error: " << WSAGetLastError() << endl;
// WSACleanup();
return 0;
}
}
else
{
//connected without waiting (will never execute)
//cout << "Connected!\n";
return 1;
}
}
co dziwne lokalnie to dziala acz od czasu do czasu nie zawiazuje polaczenia - zdalnie
nie chcialo dzilac
jeszcze tego nie testowalem ale byc moze ten timeout tutaj ustawiony (30 ms) jest za
maly
to wogole chyba nie tak powinno wygladac, wydaje mi sie ze nalezy chyba zarzucic
connect
(ktory ma byc nieblokujacy a pozniej sprawdzac czy przyszlo info ze 'zaszedl' (jest
connected) - jesli tak to dzial to chyab powinienem to podzielic na dwie funkcje ale
musze jeszcze troche doczytac by uzupelnic zen ;c (nie wszystko na raz, ogolneie
jednak czuje sie z scketami jestem juz ok ;c)
Najnowsze wątki z tej grupy
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
- Ideologia Polskiego Programisty wer.3
Najnowsze wątki
- 2024-04-27 Nowy, "szybki "komputer AsRock nie posiada modułu TPM
- 2024-04-27 Nowy, "szybki "komputer AsRock nie posiada modułu TPM
- 2024-04-27 Warszawa => Inżynier DevOps (projekt JP) <=
- 2024-04-27 Warszawa => Senior Account Manager (on-site) <=
- 2024-04-27 Wrocław => Dyrektor Sprzedaży (branża usług/produktów IT) <=
- 2024-04-27 Warszawa => Sales Representative for Outsourcing Services <=
- 2024-04-27 Chrzanów => Administrator i wdrożeniowiec Lotus Notes/Domino <=
- 2024-04-27 Ja pierdolę...
- 2024-04-27 Ryby i kawitacja
- 2024-04-27 Zabrze => Junior HelpDesk <=
- 2024-04-27 Katowice => Administrator IT - Wirtualizacja i Konteneryzacja <=
- 2024-04-27 Bażanowice => Inżynier Industrializacji - Elektronik <=
- 2024-04-27 Warszawa => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2024-04-27 Zadaszenie tarasu, a wymagany spadek
- 2024-04-27 Warszawa => Senior Account Manager <=