Claude Code Plugins

Community-maintained marketplace

Feedback

High-performance I/O multiplexing including epoll, IOCP, kqueue, and io_uring

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name io-multiplexing
description High-performance I/O multiplexing including epoll, IOCP, kqueue, and io_uring
sasmp_version 1.3.0
version 2.0.0
bonded_agent 02-networking-specialist
bond_type PRIMARY_BOND
parameters [object Object]
retry_config [object Object]
observability [object Object]

I/O Multiplexing for Game Servers

Implement high-performance I/O handling for thousands of concurrent connections.

I/O Model Comparison

Model Platform Connections Latency
epoll Linux 100K+ Low
kqueue BSD/macOS 100K+ Low
IOCP Windows 100K+ Low
io_uring Linux 5.1+ 1M+ Lowest
select All ~1000 Medium

Linux epoll

#include <sys/epoll.h>

int epollfd = epoll_create1(0);

// Add socket
struct epoll_event ev;
ev.events = EPOLLIN | EPOLLET;  // Edge-triggered
ev.data.fd = client_socket;
epoll_ctl(epollfd, EPOLL_CTL_ADD, client_socket, &ev);

// Event loop
struct epoll_event events[MAX_EVENTS];
while (running) {
    int nfds = epoll_wait(epollfd, events, MAX_EVENTS, timeout_ms);
    for (int i = 0; i < nfds; i++) {
        if (events[i].events & EPOLLIN) handleRead(events[i].data.fd);
        if (events[i].events & EPOLLOUT) handleWrite(events[i].data.fd);
    }
}

Linux io_uring

#include <liburing.h>

struct io_uring ring;
io_uring_queue_init(256, &ring, 0);

// Submit read
struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);
io_uring_prep_recv(sqe, socket_fd, buffer, BUFFER_SIZE, 0);
io_uring_sqe_set_data(sqe, &connection);
io_uring_submit(&ring);

// Reap completions
struct io_uring_cqe *cqe;
io_uring_wait_cqe(&ring, &cqe);
Connection* conn = io_uring_cqe_get_data(cqe);
handleCompletion(conn, cqe->res);
io_uring_cqe_seen(&ring, cqe);

Game Server Pattern

class GameServer {
    int epollfd;

    void run() {
        while (running) {
            pollEvents(16);  // 16ms = 60 FPS budget
            gameTick();
            broadcastState();
        }
    }

    void pollEvents(int timeout_ms) {
        struct epoll_event events[1024];
        int n = epoll_wait(epollfd, events, 1024, timeout_ms);
        for (int i = 0; i < n; i++) {
            handleEvent(events[i]);
        }
    }
};

Troubleshooting

Common Failure Modes

Error Root Cause Solution
EMFILE Too many fds Increase ulimit
Missed events Level-triggered bug Use edge-triggered
Starvation Unbalanced load Round-robin
High latency Blocking call Async everything

Debug Checklist

# Check fd limits
ulimit -n

# Monitor fd usage
ls /proc/$(pgrep game-server)/fd | wc -l

# Check epoll stats
cat /proc/$(pgrep game-server)/fdinfo/3

Unit Test Template

TEST(EpollServer, HandlesMultipleConnections) {
    EpollServer server(8080);
    vector<TcpClient> clients(100);

    for (auto& client : clients) {
        client.connect("localhost", 8080);
    }

    EXPECT_EQ(server.connectionCount(), 100);
}

Resources

  • assets/ - I/O benchmarks
  • references/ - Platform guides