What it builds
src/Server/Socket/Connection.php — Wraps an accepted connection's \Socket resource:
read(int $length = 65536): string|false — returns false if closed
write(string $data): int|false — returns false if closed
close(): void — idempotent, sets $closed = true
isClosed(): bool
getPeerName(): array — ['host' => '...', 'port' => 123], throws if closed or fails
getLastActivity(): float — microtime(true) of last successful read/write, for timeout detection
setOption(int $level, int $option, mixed $value): void — silently returns if closed
lastActivity updated only on successful read/write ($data !== false / $result !== false)
Files to create
| Action |
Path |
| Create |
src/Server/Socket/Connection.php |
Tasks from PR #58 review
| # |
Task |
Status |
| 1 |
getPeerName(): closed check + return value validation |
✅ Done (#58, 71e8fa2) |
| 2 |
lastActivity only updated on successful read/write |
✅ Done (#58, 71e8fa2) |
| 3 |
setOption() return value validation in both Connection and Socket |
✅ Done (#58, 71e8fa2) |
| 4 |
Add ConnectionTest with coverage for all methods and closed-socket paths |
⬜ To do |
| 5 |
testCloseIsIdempotent assertion |
✅ Done (#58, 71e8fa2) |
| 6 |
testAcceptReturnsConnection uses Socket API instead of raw functions |
✅ Done (#58, 71e8fa2) |
Dependencies
None (pure wrapper around \Socket).
References
- Spec: Connection section
- Plan: Task 4
- Milestone doc:
docs/superpowers/milestone-1/04-connection.md
What it builds
src/Server/Socket/Connection.php— Wraps an accepted connection's\Socketresource:read(int $length = 65536): string|false— returnsfalseif closedwrite(string $data): int|false— returnsfalseif closedclose(): void— idempotent, sets$closed = trueisClosed(): boolgetPeerName(): array—['host' => '...', 'port' => 123], throws if closed or failsgetLastActivity(): float—microtime(true)of last successful read/write, for timeout detectionsetOption(int $level, int $option, mixed $value): void— silently returns if closedlastActivityupdated only on successful read/write ($data !== false/$result !== false)Files to create
src/Server/Socket/Connection.phpTasks from PR #58 review
getPeerName(): closed check + return value validationlastActivityonly updated on successful read/writesetOption()return value validation in both Connection and SocketConnectionTestwith coverage for all methods and closed-socket pathstestCloseIsIdempotentassertiontestAcceptReturnsConnectionuses Socket API instead of raw functionsDependencies
None (pure wrapper around
\Socket).References
docs/superpowers/milestone-1/04-connection.md