この例は、メッセージをセキュリティ属性とともに受信し、セキュリティ属性情報を取得します。
#include <tsix/t6attrs.h>
#include <tsol/label.h>
main()
{
char buf[512];
int retval, len = sizeof(buf), sock;
t6mask_t recvmask;
t6attr_t recvattrs;
bslabel_t *senslabel;
bclear_t *clearance;
/* すべてのセキュリティ属性フィールドを使用してマスクを初期化する */
recvmask = T6M_ALL_ATTRS;
recvattrs = t6alloc_blk(recvmask);
/* ソケット通信を設定するコード */
/* ... */
/* メッセージ上のセキュリティ属性を受ける */
retval = t6recvfrom(sock, buf, len, 0, 0, 0, recvattrs, 0);
/* セキュリティ属性値を取り出す */
senslabel = (bslabel_t *)t6get_attr(T6_SL, recvattrs);
clearance = (bclear_t *)t6get_attr(T6_CLEARANCE, recvattrs);
}
次の例は、属性を指定せずに newmask を作成し、値 T6_ON を使用して t6new_attr(3N) ルーチンを呼び出し、newmask を使用して t6recvfrom(3N) ルーチンを呼び出します。この組み合わせは、1 つ以上のセキュリティ属性が最後に受信したメッセージのセキュリティ属性セットと異なる場合だけ、メッセージとともにセキュリティ属性を取得するように t6recvfrom(3N) ルーチンに、指示します。t6recvfrom(3N) コールは、変更されたセキュリティ属性だけでなく、要求されるセキュリティ属性のすべてのセットを返します。セキュリティ属性に変更がある場合には newmask の値が 0 以外になるため、この値をチェックすることによりいつ新しいセキュリティ属性を検索すべきか確認できます。
#include <tsix/t6attrs.h>
#include <tsol/label.h>
main()
{
char buf[512];
int retval, len = sizeof(buf), sock;
t6mask_t newmask;
t6attr_t recvattrs;
/* ソケット通信を設定するコード */
/* ... */
/* 機密ラベルの変更を探すマスクを作成する */
newmask = T6M_NO_ATTRS;
/* 新しい属性を有効にして機密ラベルを検査する */
retval = t6new_attr(sock, T6_ON) > 0;
retval = t6recvfrom(sock, buf, len, 0, 0, 0, recvattrs, &newmask);
if(newmask > 0)
{/* プロセスのセキュリティ属性情報 */}
}