Linux: Cad é an difríocht idir socketpair () agus soicéad ()?


freagra 1:

Tá soicéid Unix cosúil le FIFOanna déthreo. Déantar gach cumarsáid sonraí, áfach, tríd an gcomhéadan soicéid agus ní tríd an gcomhéadan comhaid. Cé gur comhad speisialta iad soicéid Unix sa chóras comhad (díreach cosúil le FIFOnna), ná húsáid oscailte () agus léigh () - úsáideann tú soicéad (), ceangail (), recv (), srl.

Mar shampla, le cur síos a dhéanamh ar an soicéad Unix a theastaíonn uait a úsáid (is é sin, an cosán chuig an gcomhad áirithe ina bhfuil an soicéad), bain úsáid as struchtúr sockaddr_un

struct sockaddr_un {sun_family gearr gan síniú; / * AF_UNIX * / char sun_path [108];}

Seo an struchtúr a théann tú chuig an bhfeidhm cheangail (), a nascann tuairiscitheoir soicéad (tuairiscitheoir comhaid) le comhad ar leith (a bhfuil a ainm sa réimse sun_path).

Is gnáth-soicéid AF_UNIX iad péirí soicéad. Ciallaíonn sé seo gur féidir teachtaireachtaí breise mar SCM_RIGHTS agus SCM_CREDENTIALS a tharchur tríothu.

Má theastaigh píopa uait () ach gur mhaith leat píopa amháin a úsáid chun sonraí a sheoladh agus a fháil ón dá thaobh? Ó tharla go bhfuil píopaí aon-threorach (cé is moite de SYSV), ní féidir leat é seo a dhéanamh! Tá réiteach ann, áfach: Úsáid soicéad fearainn Unix, ós rud é gur féidir leis sonraí déthaobhacha a phróiseáil.

Tá áilleacht ghlao córais ar a dtugtar socketpair (). Tá sé seo deas go leor chun péire soicéad atá ceangailte cheana féin a thabhairt ar ais

más rud é (Socketpair (AF_UNIX, SOCK_STREAM, 0, sv) == -1) {perror ("Socketpair"); Scoir (1); }}