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.41.81 with SMTP id p78mr382813vkp.2.1512514005035; Tue, 05 Dec
    2017 14:46:45 -0800 (PST)
    X-Received: by 10.31.41.81 with SMTP id p78mr382813vkp.2.1512514005035; Tue, 05 Dec
    2017 14:46:45 -0800 (PST)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!peer03.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-medi
    a.com!news.highwinds-media.com!m31no429089qtf.0!news-out.google.com!t48ni949qtc
    .1!nntp.google.com!g35no428797qtk.1!postnews.google.com!glegroupsg2000goo.googl
    egroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Tue, 5 Dec 2017 14:46:44 -0800 (PST)
    In-Reply-To: <6...@g...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=37.47.48.37;
    posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
    NNTP-Posting-Host: 37.47.48.37
    References: <6...@g...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <4...@g...com>
    Subject: Re: from blocking to nonblocking server
    From: fir <p...@g...com>
    Injection-Date: Tue, 05 Dec 2017 22:46:45 +0000
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: quoted-printable
    X-Received-Bytes: 5744
    X-Received-Body-CRC: 2600097416
    Xref: news-archive.icm.edu.pl pl.comp.programming:211841
    [ ukryj nagłówki ]

    W dniu wtorek, 5 grudnia 2017 17:32:33 UTC+1 użytkownik fir napisał:
    > his is offtopic but maybe someone here will/would know
    >
    > i dont like to read a weeks on tcp and sockets as this is a lot and confusing
    > (i prefer this time to spend on c/graphics etc)
    >
    > i got some old tcp-server (on winapi winsock2) code, that worked but it was
    > not tested/inspected for being ok and was yet only working in blocking mode
    >
    > the code goes
    >
    > int SetupBlockingWinsockServer()
    > {
    >
    > WSADATA wsaData;
    > WSAStartup(MAKEWORD(2,2), &wsaData);
    >
    > /// Creating socket
    >
    > servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    >
    > SOCKADDR_IN sin;
    > sin.sin_family = PF_INET;
    > sin.sin_port = htons(1111);
    > sin.sin_addr.s_addr = INADDR_ANY;
    >
    > //bind
    >
    > int retVal = bind(servSock, (LPSOCKADDR)&sin, sizeof(sin));
    >
    > /// Trying to listen socket
    >
    > retVal = listen(servSock, 10);
    >
    > // Waiting for a client
    >
    > ServClientSock = accept(servSock, NULL, NULL); return
    1;
    >
    >
    > }
    >
    > (i skipped the few lines of retvalue checking for errors for clarity)
    >
    > my goal is just to turn it to non blocking without a lot of work but i would like
    to know this is ok
    >
    > i checked experimentally via message boxes that it "blocks" on accept call
    > (block may be euphemism a bit here as it hang real hard, when no client is run then
    not only hourglass-pointer is shown, not only app gets fully unresponsible and non
    redraws itself but even closing it form task manager is hard, its possible but takes
    few seconds to kill)
    >
    > what i did :
    >
    > i added some line thet is supposed to set socked as nonblocked and move accept to
    separate function which i call then periodically (from run frame event)
    >
    > int SetupBlockingWinsockServer()
    > {
    >
    > WSADATA wsaData;
    > WSAStartup(MAKEWORD(2,2), &wsaData);
    >
    > /// Creating socket
    >
    > servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    >
    > SOCKADDR_IN sin;
    > sin.sin_family = PF_INET;
    > sin.sin_port = htons(1111);
    > sin.sin_addr.s_addr = INADDR_ANY;
    >
    > //bind
    >
    > int retVal = bind(servSock, (LPSOCKADDR)&sin, sizeof(sin));
    >
    > /// Trying to listen socket
    >
    > retVal = listen(servSock, 10);
    >
    > // set no blocking
    >
    > u_long no_block=1;
    > ioctlsocket(servSock,FIONBIO,&no_block);
    >
    > }
    >
    > int WaitForClientAccept()
    > {
    > /// Waiting for a client
    >
    > ServClientSock = accept(servSock, NULL, NULL);
    >
    > if(ServClientSock == INVALID_SOCKET) return 0;
    >
    >
    > u_long no_block=1;
    > ioctlsocket(ServClientSock,FIONBIO,&no_block);
    > return 1;
    >
    > }
    >
    > this last one is as i said run periodically on server app frame and when it return
    1 (it means it gett accepted connection?) i flag out both server code to not call it
    more and
    > client not to send more connections
    >
    > it seem to work but as this is my
    > own slight experimentation only i would like to get pproval/confirmation
    > that this is in fact ok
    >
    > is this ok or is there something wrong with it?
    >
    > (btw as a side questions, do i need those flaging out here, or if i connected i
    could not bother for flaging out more sendings for connections and checks for
    incomming connections? (i know it would be wastefull maybe to send it still 50 times
    a second after connection was accepted but besides this waste would it work? (if that
    would be work maybe sending it once a second would work as
    > automatic connection reboval when something would get disconnected?)
    >
    > tnx for answer if someone know whats goin on in that sockets/winsock, i got not
    much time for that
    >
    > (fir)

    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)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

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: