Můžu se zeptat, proč jste se se seriálem přemístil na roota? To vás z builderu vyhodili? Jinak Vaše články o socketech se mi docela líbí, tady hlavně hodí. Dokonce mi nabyté (resp. prohlobené a oživené, protože už jsem i předtím o socketech něco věděl) trochu pomohly při pohovoru v jedné firmě.
Z Builderu mě nevyhodili. Server www.builder.cz přestal publikovat nové články. Chtěl jsem tento seriál dokončit, proto jsem přešel na www.root.cz.
Těší mě Váš zájem o mé články a jsem rád že Vám pomohly.
Jste si jist, ze tato cast kodu skutecne dela, co ma:
if (FD_ISSET(a, &mySet))
{
cout
V tom druhém if má být místo malého a malé b. Omlouvám se za chybu a děkuji za upozornění.
Proc je vlastne v nazvu slanku C++? Jedine, co se tady z C++ skutecne pouziva, jsou pouze iostreamy. Vsechy ostatne veci kolem soketu jsou pouzitelne take v cistem C. Nechci ted kolem toho rozpoutat nejakou hadku - jenom nektere zacatecniky, co ctou tenhle clanek to muze odradit s tim, ze "jak se s tim pak pracuje v cistem C" nebo neco podobne.
Souhlasim s Vami.
Podle mne dnes pouzivat funkci select je zbytecne. Zkuste se podivat na C++ wrappery.
Doporucuji ACE (http://www.cs.wustl.edu/~schmidt/ACE.html).
Zde se vse resi pres tzv. reactor. Je to prenositelne. Na Windows to pouziva WaitForMultipleObjects a kde muze bud poll nebo select.
A samozrejme to umi mnohem vice veci.
Samozřejmě, vše ze soketů lze použít v čistém C. Ostatně sokety jsou o nějaký ten rok starší než C++.
Jde ale o mé ukázkové příklady. Mě C++ připadá pohodlnější. V tomto článku jsou to jen proudy, ale v příštím budu používat vymoženosti STL. S použitím hotových šablon budou ukázkové příklady kratší.
Myslím, že to asi nikoho neodradí.
Publikovat select(2) dnes jiz povazuji za trestne, select(2) je funkce s legacy problemy omezeneho poctu file-descriptoru a zaroven s nizkou efektivitou zpracovani. V novejsich UNIXech se jiz misto select(2) pouziva poll(2) http://www.penguin.cz/cgi-bin/man2html?poll , select(2) jiz jen jako fallback pro crossplatformitu aplikace.
Struktura "fd_set" je pole zahrnujici bity pro vsechny mozne file descriptory systemu, tedy v dobe kompilace omezime program na zpracovani urciteho maximalniho poctu fd (napr. FD_SETSIZE, typicky 1024). Na serverech pak muze byt treba tento per-process pocet zvysit (ulimit -n), coz je pak se select(2) pouzivajicimi aplikacemi nekompatibilni.
Nevím, jestli je opravdu tak špatné vědět o existenci select. Na poll samozřejmě také dojde. Jen to nebude hned. Nejpreve chci psát o věcech společných s WinSock. Poll pokud vím ve WinSock není. Poté dojde na věci jako je poll.
btw, vedle poll(2) je tez zajimava alternativa kqueue(2):
http://people.freebsd.org/~jlemon/papers/kqueue.pdf
k dispozici je na {Free,Net}BSD.
Původní seriál je dostupný na adrese: http://www.builder.cz/rubriky/c/c--/sokety-a-c--156186cz
(Dole jsou odkazy na ostatní články seriálu.)