abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 19:55 | IT novinky

    Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) se zapojil do mezinárodní iniciativy vedené americkou agenturou CISA (Cybersecurity and Infrastructure Security Agency) a dalšími partnery, jejímž cílem je stanovit minimální náležitosti pro tzv. Software Bill of Materials (SBOM). Nový dokument přináší praktická doporučení, jak by měl vypadat přehled komponent softwaru a jak s ním v praxi pracovat. SBOM lze

    … více »
    Ladislav Hagara | Komentářů: 0
    dnes 03:00 | Nová verze

    V aktuálním přehledu vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) bylo oznámeno vydání nové verze 0.4.0. Výrazně se zlepšilo vykreslování stránek jako lichess.org, Zulip nebo Speedtest.

    Ladislav Hagara | Komentářů: 0
    včera 19:22 | Bezpečnostní upozornění

    Vládní CERT upozorňuje (𝕏) na kritické zranitelnosti v produktech VMware: CVE-2026-59309, CVE-2026-59310 a CVE-2026-47876. Zranitelnosti v VMware vCenter umožňují vzdálenému útočníkovi se síťovým přístupem obejít autentizaci a získat neoprávněný přístup k vCenter, případně zneužít directory traversal ke spuštění libovolného kódu na vCenter.

    Ladislav Hagara | Komentářů: 1
    včera 18:33 | Bezpečnostní upozornění

    Společnost Coinkite upozorňuje na bezpečnostní chybu svých hardwarových kryptopeněženek Coldcard. Jedná se o kritickou chybu v generování náhodných čísel (RNG). Místo hardwarového generátoru náhodných čísel (TRNG) byl omylem používán softwarový fallback (PRNG).

    Ladislav Hagara | Komentářů: 1
    včera 14:11 | Zajímavý projekt

    Představena byla nová linuxová distribuce Shadowfetch Linux. Na rozdíl od mnoha nováčků, které nabízejí převážně jiné téma a výběr softwaru, tato distribuce založená na Debianu Testing s desktopovým prostředím KDE Plasma 6.6, klade lokálně běžící umělou inteligenci do centra svého desktopového zážitku.

    Pinhead | Komentářů: 0
    30.7. 17:22 | Zajímavý projekt

    Max Leiter v roce 2019 zkusil zprovoznit X server na iPadu (iOS). Nyní se k tématu vrátil a s pomocí LLM a balíčkovacích nástrojů Procursus rozběhl desktop s X11 i Waylandem. Jeho balíčky jsou dostupné v repozitáři xiOS.

    |🇵🇸 | Komentářů: 17
    30.7. 13:33 | IT novinky

    Společnost Google Cloud dnes oznámila, že její infrastruktura a služby byly oficiálně zařazeny do Katalogu cloud computingu vedeného Digitální a informační agenturou (DIA). Tato certifikace potvrzuje, že infrastruktura a služby Google Cloud splňují přísné bezpečnostní a regulační požadavky České republiky pro provoz cloudových služeb ve veřejném sektoru.

    Ladislav Hagara | Komentářů: 6
    30.7. 13:11 | IT novinky

    Vůbec poprvé v historii se stát při testování digitálních služeb obrací na širokou veřejnost. Digitální a informační agentura (DIA) a Ministerstvo vnitra zvou občany k zapojení do zátěžového testu eDokladů, které od loňského podzimu prošly optimalizací aplikace a posílením infrastruktury. Test proběhne 13. srpna ve 13:00 a pro jeho úspěch bude potřeba zapojení několika desítek tisíc občanů. Zapojení do testu je zcela dobrovolné a úkol

    … více »
    Ladislav Hagara | Komentářů: 41
    30.7. 13:00 | Nová verze

    FireDragon je webový prohlížeč, doposud založený na Floorpu, jednom z forků Firefoxu s větším důrazem na ochranu soukromí a přizpůsobení uživatelského rozhraní. Spravuje ho člen komunity distribuce Garuda Linux. Nové vydání verze 13 opouští Floorp a přechází přímo na Firefox s patchi z LibreWolfu a vlastními úpravami. Dostupný je také na Flathubu.

    |🇵🇸 | Komentářů: 0
    30.7. 05:44 | Zajímavý software

    picogame (GitHub) je malý 2D herní engine pro mikrokontroléry jako RP2040, čip uvnitř kapesní konzole Picopad. Hru napíšeš v Pythonu a vyzkoušíš ji v prohlížeči nebo desktopovém simulátoru. Až bude hotová, zkopíruješ ji na podporovanou desku. Na začátku nepotřebuješ C, sestavení firmwaru ani hardware.

    Ladislav Hagara | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (18%)
     (30%)
     (5%)
     (6%)
     (2%)
     (15%)
     (23%)
    Celkem 2294 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: BSD Sockety a funkce select()

    1.7.2008 11:31 ext3fs
    BSD Sockety a funkce select()
    Přečteno: 1710×
    Dobry den,

    cely den se marne snazim rozbehnout jeden program, aby pracoval jako klient/server (lokalni socket). Program obslouzi jen prvniho klienta a druhy se k nemu vubec nepripoji.

    Nerad bych se priklanel k reseni pomoci podprocesu (fork(),...) a vlakna nepripadaji vubec v uvahu. Vim ze to musi jit nejak pomoci fce select(),ale proste se mi to nedari. Pripadne mi to jako bych pri spojeni (accept()) zapomel nebo si prepsal puvodni socket vytvoreny serverem...

    Pokud by nekdo vedel kde delam chybu velmi by mi to pomohlo. Uvadim zde kratky prikladna kterem sve kroky testuji.
    *********** server.c *************
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    
    
    #define SOCK_PATH "socket"
    
    struct server_sock {
       int sock; /*socket serveru*/
       int sock_c[256]; /*klientske sockety*/
       int len; /*velikost vyhrazene pameti*/
       int t;
       int n; /*pocet klientskych socketu*/
       struct sockaddr_un local, remote;
    };
    
    struct server_sock create_sock(void);
    
    struct server_sock create_sock(void)
    {
    struct server_sock server;
    char str[100];
    
       if ((server.sock = socket(PF_UNIX, SOCK_STREAM, 0)) == -1)
       {
           fprintf(stdout, "socket : %s\n",strerror(errno));
           exit(1);
       }
    
       server.local.sun_family = PF_UNIX;
    
       strcpy(server.local.sun_path, SOCK_PATH);
       unlink(server.local.sun_path);
    
       server.len = strlen(server.local.sun_path) + sizeof(server.local.sun_family);
    
       if (bind(server.sock, (struct sockaddr *)&server.local, server.len) == -1)
       {
           fprintf(stdout, "bind : %s\n",strerror(errno));
           exit(1);
       }
    
       if (listen(server.sock, 10) == -1)
       {
           fprintf(stdout, "listen on server socket : %s\n",strerror(errno));
           exit(1);
       }
    
       return(server);
    }
    
    int main(void)
    {
    struct server_sock server;
    char str[100];
    int i = 0, n;
    int sockn = 0;
    int len;
    int sock;
    fd_set sock_set;
    
       /*vytvoreni socketu*/
       server = create_sock();
    
       sock = server.sock;
    
       //tv.tv_sec = 3;
       //tv.tv_usec = 0;
    
       printf("Cekam na spojeni...\n");
    
       len = sizeof(server.remote);
    
       FD_ZERO(&sock_set);
       FD_SET(sock, &sock_set);
    
       while (1)
       {
           //FD_ZERO(&sock_set);
           //FD_SET(sock, &sock_set);
    
           for (i = 0; i < sockn; i++)
               FD_SET(server.sock_c[i], &sock_set);
                 if (select(sock + 1, &sock_set, NULL, NULL, NULL) < 0)
           {
               fprintf(stdout, "select : %s\n",strerror(errno));
               close(server.sock);
               unlink(SOCK_PATH);
               exit(1);
           }
    
            if (FD_ISSET(server.sock, &sock_set))
           {
               len = sizeof(server.remote);
    
               if ((server.sock_c[sockn] = accept(server.sock, (struct sockaddr *)&server.remote, &len)) == -1)
               {
                   fprintf(stdout, "accept : %s\n",strerror(errno));
                   close(server.sock);
                   unlink(SOCK_PATH);
                   exit(1);
               }
    
               FD_SET(server.sock_c[sockn], &sock_set);
               server.n = sockn++;
    
               fprintf(stdout, "Connected.\n");
           }
    
           for (i = 0; i < sockn; i++)
           {
               if (FD_ISSET(server.sock_c[i], &sock_set))
               {
                   n = recv(server.sock_c[i], str, 100, 0);
                   if (n <= 0)
                   {
                       fprintf(stdout, "recv : %s\n",strerror(errno));
                       FD_CLR(server.sock_c[i], &sock_set);
                       close(server.sock_c[i]);
                       exit (1);
                   }
    
                   printf("DDD: send\n");
                   if (send(server.sock_c[i], str, n, 0) <= 0)
                   {
                       fprintf(stdout, "send : %s\n",strerror(errno));
                       close(server.sock_c[i]);
                       exit (1);
                   }
               }
           }
           printf("go to back  - select\n");
       }
    
       close(server.sock);
       unlink(SOCK_PATH);
    
       return (0);
    }
    
    *************konec**************** 
    
    Omlouvam se za delku prikladu, ale pro nazornost jej posilam cely.
    Dekuji za kazdou radu. 
    

    Odpovědi

    1.7.2008 17:11 Andrej Herceg | skóre: 43
    Rozbalit Rozbalit vše Re: BSD Sockety a funkce select()
    Prvý parameter funkcie select je počet popisovačov, ktoré sa majú kontrolovať (presnejšie maximálna hodnota zo všetkých popisovačov; keď je tam sock+1 tak sa kontrola skončí pri čísle sock+1 a ďalšie sa už nekontrolujú). Teda, ak má jeden popisovač hodnotu 1 a druhý 10, tak tam musí byť číslo 10.
    2.7.2008 01:31 Jirka P.
    Rozbalit Rozbalit vše Re: BSD Sockety a funkce select()
    Prvý parameter funkcie select je počet popisovačov
    jj, tam bude určitě chyba. Ještě bych se zamyslel nad těmi zakomentovanými řádky na začátku while cyklu, mylím, že by tam být měly (nezakomentované)
    2.7.2008 12:56 ext3fs
    Rozbalit Rozbalit vše Re: BSD Sockety a funkce select()
    Tak jsem to nakonec zda se vyresil. Bylo potreba mit vice promennych pro decsriptory soketu nez jsem predpokladal. Prvni vznikly pri tvorbe socketu serveru, dalsi pro socket ktery slouzi pro naslouchani zda se nekdo nepripojil a dalsihc N pro sockety od klientu. Vse musi byt pomoci makra FD_SET zahrnuto do moziny discriptoru a zde jsem mel zrejme chybu.

    Dekuji vsem za rady :)
    2.7.2008 13:27 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: BSD Sockety a funkce select()
    Případně se zkuste podívat na poll() jako náhradu select(), jeho použití mi připadá trochu přehlednější.
    2.7.2008 13:37 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: BSD Sockety a funkce select()
    Mne pride perhladnejsi select, ale kto ako chce. Este sa da najst pomoc v "man select_tut"
    If you hold a Unix shell up to your ear, you can you hear the C.
    2.7.2008 13:52 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: BSD Sockety a funkce select()
    Když už jsme u těch osobních preferencí, tak z hlediska přehlednosti bych to seřadil asi takto:
    1. fork()
    2. pthread_create()
    3. poll()
    4. select()

    Tedy o obou bych uvažoval až ve chvíli, kdy bych měl vážné důvody nepoužít samostatné procesy nebo thready a jen pro specifické služby (velmi rychlé vyřízení požadavku, nevadí serializace).

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.