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 12:22 | Nová verze

    Webový prohlížeč Waterfox (Wikipedie), fork Firefoxu, byl vydán ve verzi 6.7.0. Postaven je na jádru Gecko ESR 153.

    Ladislav Hagara | Komentářů: 0
    dnes 11:22 | Nová verze

    Multiplatformní open source voxelový herní engine Luanti byl vydán ve verzi 5.17.0. Podrobný přehled novinek v changelogu. Přidána byla základní podpora gamepadů. Opraveno bylo několik zranitelností. Původně se jedná o Minecraftem inspirovaný Minetest v říjnu loňského roku přejmenovaný na Luanti.

    Ladislav Hagara | Komentářů: 0
    dnes 11:00 | IT novinky

    Americká technologická společnost Apple loni v Irsku na daních zaplatila 17 miliard dolarů (zhruba 350 miliard Kč). To představovalo 40 procent celkové částky, kterou firma odvedla na dani z příjmů po celém světě. Vyplývá to z účetních výkazů podniku. Platbu výrazně zvýšilo rozhodnutí Soudního dvora EU z roku 2024, podle něhož měl Apple doplatit Irsku na daních 13 miliard eur (313 miliard Kč).

    Ladislav Hagara | Komentářů: 0
    dnes 09:55 | Zajímavý projekt

    CrossPoint Reader je open-source alternativní firmware pro menší, levné čtečky, vybavené cca čtyřpalcovým e-ink displejem. Zahrnuje aplikaci pro čtení e-knih a webový server pro konfiguraci a přenos souborů po síti. Verze 1.0 byla vydána v únoru 2026. Recenze současné verze 1.5 vyšla na Linux Weekly News.

    |🇵🇸 | Komentářů: 0
    21.8. 05:00 | Nová verze

    Byla vydána verze 1.98.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    21.8. 04:22 | Nová verze

    Byla vydána nová verze 7.1 (YouTube) svobodného open source redakčního systému WordPress. Kódové jméno Mary Lou bylo vybráno na počest americké jazzové klavíristky Mary Lou Williams (YouTube).

    Ladislav Hagara | Komentářů: 0
    20.8. 19:11 | Nová verze

    Bun (Wikipedie), tj. běhové prostředí (runtime) a toolkit pro JavaScript a TypeScript, alternativa k Node.js a Deno, byl vydán ve verzi 1.4. Představení novinek také na YouTube. Bun byl přepsán z programovacího jazyka Zig do Rustu. Pomocí Claude Fable 5.

    Ladislav Hagara | Komentářů: 0
    20.8. 12:33 | Nová verze

    Vývojáři KDE na Mastodonu oznámili vydání balíku aplikací KDE Gear 26.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    20.8. 04:11 | IT novinky

    Společnost PINE64 kvůli nedostatku a vysokým cenám DRAM a eMMC dočasně pozastavuje výrobu linuxových zařízení. Výroba zařízení jako PineTime, PineVoice a Pinecil pokračuje.

    Ladislav Hagara | Komentářů: 0
    20.8. 02:55 | IT novinky

    Společnost Stripe se dohodla na akvizici společnosti OpenRouter. Za 7,5 miliardy dolarů.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (30%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2474 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: Select - multiplexování socketů

    19.8.2010 20:39 Martin Matějek | skóre: 12 | blog: Flying_circus | Kladno
    Select - multiplexování socketů
    Přečteno: 450×
    Přílohy:
    Zdravím, pokouším se napsat program komunikující přes lokální sockety (AF_UNIX), který má přijmout spojení, vytvořit nový socket pro to dané spojení (s ním pak něco dělat) a čekat na další.

    Problém nastává, když chci aby hlídal dva sockety najednou (řídící - vypnutí,restart; socket pro „obyčejné“ spojení) pomocí funkce select(). Když se jsou sockety zařazeny za sebou
    listen(...,...);
    listen(...,...);
    tak všechno funguje v pořadí daném filedescriptory.

    Když zkusím použít select() takhle:
    FD_ZERO(&fd_read);
    FD_SET(sockfd, &fd_read);	
    FD_SET(rootsockfd, &fd_read);	
    	
    select(2,&fd_read, NULL, NULL, NULL);
    if (FD_ISSET(sockfd,&fd_read)) {
    	printf("Normal socket ready.\n");
    }
    else {
    	printf("Root socket ready.\n");
    }
    
    nic se nestane a „server“ se zasekne a už se nedostane k accept(). Zajímavé ovšem je, že „klient“ odešle to co má a skončí.

    Otázka zní: Jak funguje select()? Vycházel jsem z referenční příručky GNU C library (http://www.gnu.org/software/libc/manual/), kde mají ukázky podobným stylem.

    (Zdrojáky v příloze)
    Don't judge me by the friends I keep. No, no, no. Judge me by the enemies I have slain!

    Řešení dotazu:


    Odpovědi

    Řešení 1× (Martin Matějek (tazatel))
    19.8.2010 21:36 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Select - multiplexování socketů

    První argument select(2) není počet deskriptorů v poli deskriptorů, ale číslo nejvyššího deskriptoru navýšené o 1.

    Prakticky ve vašem programu čekáte na čtecí událost nad prázdnou množinou deskriptorů, která tedy nikdy nenastane. Deskriptor 0 a 1 má totiž již standardní vstup a standardní výstup.

    19.8.2010 23:51 Martin Matějek | skóre: 12 | blog: Flying_circus | Kladno
    Rozbalit Rozbalit vše Re: Select - multiplexování socketů
    Aha!
    select(FD_SETSIZE,&fd_read, NULL, NULL, NULL);
    
    to vyřešilo, díky!
    Don't judge me by the friends I keep. No, no, no. Judge me by the enemies I have slain!
    20.8.2010 07:43 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Select - multiplexování socketů
    Což ovšem kvůli implementaci v jádře bude nechutně pomalé. Proč tam asi tak ten první argument vůnec je? Je třeba při přidávání deskriptoru do pole hledat nejvyšší hodnotu deskriptoru a tu pak selectu předat.
    Luboš Doležel (Doli) avatar 20.8.2010 13:50 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Select - multiplexování socketů
    Proč tam asi tak ten první argument vůnec je?
    To by mě mimochodem docela zajímalo.
    20.8.2010 16:00 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Select - multiplexování socketů

    To byla řečnická otázka. Ale jestli chcete odpověď:

    Právě proto, že pole deskriptorů jsou skutečná pole a jádro je prochází lineárně. Vzhledem k tomu, že deskriptory mají obvykle malé číslo, tak je hloupost procházet všech INT_MAX prvků, když z nich většina je nevyplněná.

    20.8.2010 16:44 Martin Matějek | skóre: 12 | blog: Flying_circus | Kladno
    Rozbalit Rozbalit vše Re: Select - multiplexování socketů
    Mea culpa. Poté co jsem odeslal odpověď mě napadlo, že to možná je kanón na vrabce. Dík za vysvětlení.
    Don't judge me by the friends I keep. No, no, no. Judge me by the enemies I have slain!
    21.8.2010 01:23 zulu
    Rozbalit Rozbalit vše Re: Select - multiplexování socketů
    Kromě toho už vyřešeného prvního parametru... ten if-else po selectu by měl být if,if.

    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.