====== BSD Sockets ====== //BSD Sockets// je aplikační programové rozhraní (API), s jehož pomocí lze programovat komunikační aplikace všeho druhu. Jak název napovídá, bylo původně vytvořeno na univerzitě v Berkeley pro BSD Unix, ale postupně se rozšířilo nejen do všech ostatních odnoží Unixu, ale také do operačních systémů MacOS, MS Windows a dokonce i PalmOS. Použití //BSD Sockets// se neomezuje jen na síťový protokol IP, nicméně v oblasti internetových aplikací má zdaleka největší význam. Bez nadsázky lze tvrdit, že současný Internet je na tomto programovém rozhraní postaven. Jak známo, (téměř) všechno v Unixu je soubor. //BSD Sockets// používají toto unixové paradigma pro komunikaci mezi programy. Využívá se k tomu abstraktní programový objekt - //soket// - reprezentující komunikační kanál, jímž si mohou programy navzájem vyměňovat data prostřednictvím standardních souborových deskriptorů //(file descriptors)//. API //BSD Sockets// je velmi obecné a je možno je použít pro celou řadu rodin komunikačních protokolů //(protocol families)//. Linux 2.4 jich v hlavičkovém souboru /usr/include/bits/socket.h definuje celkem 32. Nás zde budou zajímat pouze dvě z nich, používané pro datovou komunikaci nad IP: ''PF_INET'' pro IPv4 a ''PF_INET6'' pro IPv6. Datové struktury původních //BSD Sockets// byly sice navrženy s jistou rezervou, ta však nestačí pojmout čtyřnásobné prodloužení adres a další informace, které sokety IPv6 potřebují. API bylo proto nutno doplnit a upravit. Příslušná pracovní skupina IETF //(Internet Engineering Task Force)// této příležitosti využila také k jisté konsolidaci a zefektivnění API //BSD Sockets//. Výsledkem je RFC 3493, které de facto umožňuje programovat internetové aplikace jednotně pro obě verze protokolu IP. Datové struktury a funkce //BSD Sockets// budeme popisovat v té podobě, jak jsou definovány v hlavičkových souborech Linuxu, tedy prostředky programovacího jazyka C (někdy ovšem kvůli přehlednosti s mírnými zjednodušeními). Ekvivalentní API je samozřejmě k dispozici pro většinu běžných programovacích jazyků. Pro ukázky programů na konci tohoto příspěvku použijeme jazyk Python, který jako jeden z prvních (od verze 2.2.1) dává k dispozici toto nové API. Ukázky tak budou daleko přehlednější, neboť budeme ušetřeni některých technických komplikací při práci s proměnnými a argumenty funkcí. Podrobně diskutujeme pouze změny, které přináší nové API //BSD Sockets//, a předpokládáme tudíž aspoň rámcovou znalost technologie IP, jazyka C a původního API. Pro získání či doplnění vědomostí o obou tématech je k dispozici jak řada zdrojů na webu, tak i několik monografií (též v češtině). Za všechny jmenujme aspoň klasickou knihu //Richard W. Stevens: UNIX Network Programming//. Velmi dobrým zdrojem informací jsou také unixové on-line manuály.