sockatmark(3)

الاسم
sockatmark - تحديد ما إذا كان المقبس عند علامة خارج النطاق

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <sys/socket.h>

int sockatmark(int sockfd);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

sockatmark():
    _POSIX_C_SOURCE >= 200112L

الوصف
تُرجع sockatmark() قيمة تشير إلى ما إذا كان المقبس المشار إليه بواصف الملف sockfd عند علامة خارج النطاق أم لا. إذا كان المقبس عند العلامة، يُرجع 1؛ إذا لم يكن المقبس عند العلامة، يُرجع 0. لا تزيل هذه الدالة علامة خارج النطاق.

قيمة الإرجاع
يُرجع الاستدعاء الناجح لـ sockatmark() القيمة 1 إذا كان المقبس عند علامة خارج النطاق، أو 0 إذا لم يكن. عند حدوث خطأ، يُرجع -1 ويُضبط errno للإشارة إلى الخطأ.

الأخطاء

EBADF
    sockfd ليس واصف ملف صالحاً.

EINVAL
    sockfd ليس واصف ملف يمكن تطبيق sockatmark() عليه.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
sockatmark() | سلامة الخيوط | MT-Safe

المعايير
POSIX.1-2008.

التاريخ
glibc 2.2.4. POSIX.1-2001.

ملاحظات
إذا أرجع sockatmark() القيمة 1، فيمكن قراءة البيانات خارج النطاق باستخدام علامة MSG_OOB من recv(2).

تُدعم البيانات خارج النطاق فقط على بعض بروتوكولات مقابس التدفق.

يمكن استدعاء sockatmark() بأمان من معالج إشارة SIGURG.

تُنفذ sockatmark() باستخدام عملية SIOCATMARK ioctl(2).

العلل
قبل glibc 2.4، لم تعمل sockatmark().

أمثلة
يمكن استخدام الكود التالي بعد استلام إشارة SIGURG لقراءة (وتجاهل) جميع البيانات حتى العلامة، ثم قراءة بايت البيانات عند العلامة:

        char buf[BUF_LEN];
        char oobdata;
        int atmark, s;

        for (;;) {
            atmark = sockatmark(sockfd);
            if (atmark == -1) {
                perror("sockatmark");
                break;
            }

            if (atmark)
                break;

            s = read(sockfd, buf, BUF_LEN);
            if (s == -1)
                perror("read");
            if (s <= 0)
                break;
        }

        if (atmark == 1) {
            if (recv(sockfd, &oobdata, 1, MSG_OOB) == -1) {
                perror("recv");
                ...
            }
        }

انظر أيضًا
fcntl(2), recv(2), send(2), tcp(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.