eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingRe: from blocking to nonblocking server › Re: from blocking to nonblocking server
  • X-Received: by 10.31.148.200 with SMTP id w191mr1287016vkd.11.1512753200845; Fri, 08
    Dec 2017 09:13:20 -0800 (PST)
    X-Received: by 10.31.148.200 with SMTP id w191mr1287016vkd.11.1512753200845; Fri, 08
    Dec 2017 09:13:20 -0800 (PST)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!peer01.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-medi
    a.com!news.highwinds-media.com!g35no1248363qtk.1!news-out.google.com!v55ni1749q
    tc.0!nntp.google.com!g35no1248359qtk.1!postnews.google.com!glegroupsg2000goo.go
    oglegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Fri, 8 Dec 2017 09:13:20 -0800 (PST)
    In-Reply-To: <4...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=5.172.255.234;
    posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
    NNTP-Posting-Host: 5.172.255.234
    References: <6...@g...com>
    <4...@g...com>
    <1...@t...com>
    <4...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <a...@g...com>
    Subject: Re: from blocking to nonblocking server
    From: fir <p...@g...com>
    Injection-Date: Fri, 08 Dec 2017 17:13:21 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    X-Received-Body-CRC: 1260471727
    X-Received-Bytes: 5028
    Xref: news-archive.icm.edu.pl pl.comp.programming:211866
    [ ukryj 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)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: