int sockatmark(int sockfd);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
sockatmark(): _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600
帯域外データは、いくつかのストリームソケットプロトコルでしか サポートされていない。
sockatmark() は SIGURG シグナルのハンドラから安全に呼び出すことができる。
sockatmark() は SIOCATMARK ioctl(2) 操作を使って実装されている。
    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) <= 0);
        if (s == -1)
            perror("read");
        if (s <= 0)
            break;
    }
    if (atmark == 1) {
        if (recv(sockfd, &oobdata, 1, MSG_OOB) == -1) {
            perror("recv");
            ...
        }
    }