Linux: ما هو الفرق بين socketpair () و socket ()؟


الاجابه 1:

تشبه مآخذ يونكس مثل FIFOs ثنائية الاتجاه. ومع ذلك ، سيتم إجراء جميع اتصالات البيانات عبر واجهة المقابس ، بدلاً من واجهة الملف. على الرغم من أن مآخذ Unix هي ملف خاص في نظام الملفات (تمامًا مثل FIFOs) ، فلن تستخدم open () و read () - ستستخدم socket () ، وربط () ، و recv () ، إلخ.

على سبيل المثال ، عند وصف مأخذ Unix الذي تريد استخدامه (أي المسار إلى الملف الخاص الذي هو المقبس) ، يمكنك استخدام sockaddr_un struct

struct sockaddr_un {unsigned short sun_family؛ / * AF_UNIX * / char sun_path [108]؛}

هذه هي البنية التي ستقوم بتمريرها إلى الدالة bind () ، والتي تربط واصف المقبس (واصف الملف) بملف معين (الاسم موجود في حقل sun_path).

أزواج المقبس هي مآخذ AF_UNIX عادية ، مما يعني أنه يمكن تمرير الرسائل المساعدة مثل SCM_RIGHTS و SCM_CREDENTIALS.

إذا كنت تريد توجيه الإخراج () ، لكنك تريد استخدام توجيه إخراج واحد لإرسال البيانات وتلقيها من كلا الجانبين؟ نظرًا لأن الأنابيب أحادية الاتجاه (مع وجود استثناءات في SYSV) ، لا يمكنك القيام بذلك! هناك حل ، على الرغم من ذلك: استخدام مأخذ مجال Unix ، حيث يمكنهم التعامل مع بيانات ثنائية الاتجاه.

هناك مجموعة من مكالمات النظام المعروفة باسم socketpair () هذا جميل بما يكفي للعودة إليك بمأخذين متصلين بالفعل

if (socketpair (AF_UNIX، SOCK_STREAM، 0، sv) == -1) {perror ("socketpair")؛ الخروج (1)؛ }