Skip to content

Day54 - UNIX Domain Socket Advanced IPC

Objective

Learn advanced AF_UNIX IPC concepts:

  • Abstract namespace socket
  • SO_PEERCRED
  • Permission control
  • SOCK_DGRAM
  • Datagram request/reply
  • Datagram truncation

Environment

  • Linux userspace
  • GCC
  • AF_UNIX socket APIs

Part 1 - Abstract Namespace Socket

Server Bind

Example:

addr.sun_family = AF_UNIX;
addr.sun_path[0] = '\0';

memcpy(&addr.sun_path[1],
       SERVER_SOCKET_NAME,
       strlen(SERVER_SOCKET_NAME));

Address length:

addr_len =
    offsetof(struct sockaddr_un, sun_path)
    + 1
    + strlen(SERVER_SOCKET_NAME);

Verification

Run:

ss -xl

Expected:

@mypoll.sock

Verify filesystem socket does not exist:

ls /tmp/mypoll.sock

Expected:

No such file or directory

Part 2 - SO_PEERCRED

Retrieve Peer Credential

Example:

struct ucred cred;

getsockopt(fd,
           SOL_SOCKET,
           SO_PEERCRED,
           &cred,
           &len);

Expected log:

pid=1234 uid=1000 gid=1000

Part 3 - Permission Control

Restrict privileged commands:

if (!client_is_privileged(&client->cred))
    return server_reply_perm_denied(q);

Test:

  • Normal user
  • Root user

Part 4 - SOCK_DGRAM Server

Create DGRAM Socket

fd = socket(AF_UNIX, SOCK_DGRAM, 0);

No:

  • listen()
  • accept()

Part 5 - recvfrom()

Example:

recvfrom(fd,
         buf,
         sizeof(buf) - 1,
         0,
         (struct sockaddr *)&client_addr,
         &addr_len);

Verify sender address:

client-1
client-2

Part 6 - Request / Reply

Client

sendto(server)

Server

recvfrom(client)
sendto(client)

Client

recvfrom(server)

Part 7 - Message Boundary Test

Client sends multiple packets:

msg1
msg2
msg3

Verify server receives separate packets.

Expected:

msg1
msg2
msg3

Not:

msg1msg2msg3

Part 8 - Datagram Truncation Test

Setup

  • Server RX buffer: 128 bytes
  • Client packet: >128 bytes

Example:

recvfrom(..., MSG_TRUNC, ...)

Expected behavior:

  • Packet truncated
  • Remaining bytes discarded
  • Next packet unaffected

Expected warning:

Message truncated because it is too long.

Summary

This lab demonstrates:

  • Linux-specific AF_UNIX features
  • Local IPC authentication
  • Datagram packet semantics
  • STREAM vs DGRAM behavior
  • Truncation handling