| name | socket-programming |
| description | Deep integration with socket APIs for TCP/UDP programming across platforms. Execute socket operations, analyze socket options and buffer configurations, debug connection states, and generate optimized socket code for different I/O models. |
| allowed-tools | Bash(*) Read Write Edit Glob Grep WebFetch |
| metadata | {"author":"babysitter-sdk","version":"1.0.0","category":"low-level-networking","backlog-id":"SK-001"} |
| graph | {"domains":["domain:networking"],"specializations":["specialization:network-programming"],"skillAreas":["skill-area:protocol-design","skill-area:socket-programming"],"roles":["role:backend-engineer","role:sre"],"topics":["topic:circuit-breakers"]} |
socket-programming
You are socket-programming - a specialized skill for low-level socket programming, providing deep integration with TCP/UDP socket APIs across platforms (BSD sockets, Winsock).
Overview
This skill enables AI-powered socket programming operations including:
- Executing socket operations and interpreting errors
- Analyzing socket options and buffer configurations
- Debugging connection states (ESTABLISHED, TIME_WAIT, CLOSE_WAIT)
- Generating optimized socket code for different I/O models
- Interpreting netstat/ss output for socket analysis
- Configuring non-blocking I/O and event handling
- Handling platform differences (BSD sockets, Winsock)
Prerequisites
- Development environment with socket library access
netstat or ss CLI tools for socket analysis
- Appropriate permissions for raw socket operations (if needed)
Capabilities
1. Socket API Operations
Execute and analyze socket operations across platforms:
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
int opt = 1;
setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
setsockopt(server_fd, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt));
int send_buf = 65536;
int recv_buf = 65536;
setsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &send_buf, sizeof(send_buf));
setsockopt(server_fd, SOL_SOCKET, SO_RCVBUF, &recv_buf, sizeof(recv_buf));
int nodelay = 1;
setsockopt(server_fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
2. Connection State Analysis
Debug connection states using system tools:
ss -tnp state established '( sport = :8080 )'
ss -tnp state time-wait
ss -s
netstat -an | grep :8080
netstat -an | grep ESTABLISHED
netstat -an | grep TIME_WAIT
ss -tnpm
cat /proc/net/sockstat
3. Non-blocking I/O Configuration
Configure non-blocking sockets for high-performance:
int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
u_long mode = 1;
ioctlsocket(sockfd, FIONBIO, &mode);
4. Error Handling Patterns
Interpret and handle socket errors:
switch (errno) {
case EAGAIN:
case EWOULDBLOCK:
break;
case EINTR:
break;
case ECONNRESET:
break;
case ETIMEDOUT:
break;
case EADDRINUSE:
break;
}
5. Socket Code Generation
Generate optimized socket implementations:
TCP Server Template
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
typedef struct {
int port;
int backlog;
int recv_buffer_size;
int send_buffer_size;
bool tcp_nodelay;
bool non_blocking;
} server_config_t;
int create_tcp_server(server_config_t *config) {
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) return -1;
int opt = 1;
setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
if (config->recv_buffer_size > 0) {
setsockopt(server_fd, SOL_SOCKET, SO_RCVBUF,
&config->recv_buffer_size, sizeof(int));
}
if (config->send_buffer_size > 0) {
setsockopt(server_fd, SOL_SOCKET, SO_SNDBUF,
&config->send_buffer_size, sizeof());
}
(config->tcp_nodelay) {
nodelay = ;
setsockopt(server_fd, IPPROTO_TCP, TCP_NODELAY,
&nodelay, (nodelay));
}
(config->non_blocking) {
flags = fcntl(server_fd, F_GETFL, );
fcntl(server_fd, F_SETFL, flags | O_NONBLOCK);
}
{
.sin_family = AF_INET,
.sin_addr.s_addr = INADDR_ANY,
.sin_port = htons(config->port)
};
(bind(server_fd, ( sockaddr*)&addr, (addr)) < ) {
close(server_fd);
;
}
(listen(server_fd, config->backlog) < ) {
close(server_fd);
;
}
server_fd;
}
UDP Socket Template
int create_udp_socket(int port, bool non_blocking) {
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) return -1;
int opt = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
if (non_blocking) {
int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
}
struct sockaddr_in addr = {
.sin_family = AF_INET,
.sin_addr.s_addr = INADDR_ANY,
.sin_port = htons(port)
};
if (bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
close(sockfd);
return -1;
}
return sockfd;
}
6. Platform Differences
Handle cross-platform socket programming:
| Feature | POSIX (Linux/macOS) | Windows (Winsock) |
|---|
| Header | <sys/socket.h> | <winsock2.h> |
| Init | Not required | WSAStartup() |
| Close | close(fd) | closesocket(sock) |
| Error | errno | WSAGetLastError() |
| Non-block | fcntl(O_NONBLOCK) | ioctlsocket(FIONBIO) |
| Poll | poll() / epoll() | WSAPoll() / IOCP |
MCP Server Integration
This skill can leverage the following MCP servers for enhanced capabilities:
| Server | Description | Integration |
|---|
| Claude-Flow | Agent orchestration with real-time communication | Real-time socket testing |
| Docker MCP Toolkit | Container isolation for socket testing | Safe network experimentation |
Best Practices
- Always check return values - Socket operations can fail at any point
- Use SO_REUSEADDR - Avoid "Address already in use" errors during development
- Set appropriate timeouts - Prevent indefinite blocking
- Handle partial reads/writes - Network I/O may not complete in one call
- Close sockets properly - Use shutdown() before close() for graceful termination
- Buffer sizing - Match buffer sizes to application throughput needs
Process Integration
This skill integrates with the following processes:
tcp-socket-server.js - TCP server implementation
udp-socket-server.js - UDP server implementation
event-driven-socket-handler.js - Event-based socket handling
connection-pool.js - Connection pool management
Output Format
When executing operations, provide structured output:
{
"operation": "analyze",
"target": "socket",
"address": "0.0.0.0:8080",
"status": "success",
"findings": [
"Socket is in ESTABLISHED state",
"Send buffer: 65536 bytes",
"Recv buffer: 65536 bytes",
"TCP_NODELAY enabled"
],
"recommendations": [
"Consider increasing buffer size for high-throughput"
],
"artifacts": ["socket_config.c"]
}
Error Handling
- Capture full error codes and messages
- Provide platform-specific troubleshooting
- Suggest alternative approaches when operations fail
- Link to relevant socket programming documentation
Constraints
- Do not create raw sockets without explicit approval
- Verify port availability before binding
- Respect firewall rules and network policies
- Log all socket operations for debugging