Skip to content

M1I04: Connection wrapper #6

@s2x

Description

@s2x

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(): floatmicrotime(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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions