Linux: Mis vahe on socketpair () ja socket () vahel?


Vastus 1:

Unixi pistikupesad on täpselt nagu kahesuunalised FIFO-d. Kogu andmeside toimub aga faililiidese asemel pistikupesa liidese kaudu. Ehkki Unixi pistikupesad on failisüsteemis spetsiaalne fail (nagu ka FIFOs), ei kasuta te avatud () ja lugemist () - kasutate siiski pesa (), köitmist (), recv () jne.

Näiteks kirjeldades, millist Unixi pistikupesa soovite kasutada (see tähendab tee spetsiaalse faili juurde, mis on pistikupesa), kasutate strukti sockaddr_un

struct sockaddr_un {allkirjastamata lühike sun_family; / * AF_UNIX * / char sun_path [108];}

See on struktuur, mille edastate funktsioonile bind (), mis seob sokli kirjelduse (faili kirjeldaja) teatud failiga (mille nimi asub väljal sun_path).

Socketpaarid on tavalised AF_UNIX pistikupesad, mis tähendab, et abisõnumeid, näiteks SCM_RIGHTS ja SCM_CREDENTIALS, saab neist edastada.

Kui soovisite toru (), kuid soovite kasutada mõlemalt poolelt andmete saatmiseks ja vastuvõtmiseks ühte toru? Kuna torud on ühesuunalised (eranditega SYSV-s), ei saa te seda teha! Siiski on olemas lahendus: kasutage Unixi domeeni pistikupesa, kuna nad saavad hakkama kahesuunaliste andmetega.

Seal on süsteemikõne ilu, mida tuntakse kui socketpair (). See on piisavalt tore, et tagastada teile juba ühendatud pistikupesad

if (pesapaar (AF_UNIX, SOCK_STREAM, 0, sv) == -1) {perror ("socketpair"); väljumine (1); }