← 목록
기타 2026-07-09 5KB 읽기 5분

웹소켓 WS opcode 슬롯→fd 번역 수정 (파동② P0-②)

개요

/Users/ef/crowny-rpnkit/라이브러리카드/웹소켓카드.md(파동① 검증 카드)가 문서화한 §함정1 — WS opcode(780~787)가 표준 소켓 API(소켓생성/소켓바인드/소켓수락, VM 내부 "슬롯" 반환)와 조합하면 100% 실패하는 문제 — 를 근본 수정하는 P0-② 과제. crownyc.c에 슬롯→fd 번역 헬퍼 ws_resolve_fd()를 추가해 WS opcode 8종 전체에 배선, TCP대기/TCP수락(raw fd) 경로는 하위호환 유지.

무엇을 했는지

  1. 신중배포 백업: crownyc.c.bak-20260708-ws, crownyc.bak-20260708-ws (수정 전 시점).
  2. crownyc.cws_resolve_fd(int v) 헬퍼 추가(sock_free() 직후) — v가 실제 할당된
소켓 슬롯(sock_fds[v]>=0)이면 real fd로 번역, 아니면(raw fd) 그대로 반환. sock_init()을 먼저 호출해 BSS 미초기화(0값) 오번역 회귀를 방지.
  1. WS opcode 8종(780 WS_UPGRADE ~ 787 WS_STATUS) 전부에 fd 인자 pop 직후
va = ws_resolve_fd((int)va); 삽입.
  1. 동시편집 충돌 처리: 작업 중 LIVE_STATUS.md에서 /Users/ef/CrownyOS/crownyc cwd로
등록된 세션이 다수(10+) 확인됨. 실제로 동일한 ws_resolve_fd 함수명·sock_init() 보정까지 포함한 거의 동일한 구현이 이미 반영되어 있었고, 라이브 바이너리도 이미 재빌드되어 있었음 — 다른 세션이 같은 P0-② 과제를 병행 수행 중이었던 것으로 판단. 본 세션은 그 결과물을 독립 검증하고, 검증 스크립트를 슬롯 API 그린케이스로 갱신하는 역할로 전환.
  1. 무관한 동시편집 충돌(다항곱NTT opcode 944/945 이름테이블 중복 case 944)로 소스 컴파일이
일시 불가능했던 것을 발견 — 실제 opcode 스위치 구현(crownyc.c:12132 COEF_FIELD=944, :13586 POLY_MUL_NTT=945)과 대조해 중복된 구버전 라벨 한 줄만 제거(WS 로직과 무관, 부작용 없음).
  1. /Users/ef/crowny-rpnkit/라이브러리카드/웹소켓검증.sh §2를 "함정 재현(실패 기대)"에서
"슬롯 API 경로 8종 opcode 그린 검증(성공 기대)"으로 전면 재작성 — 핸드셰이크101+Accept 일치, 에코, 핑/퐁, 바이너리, 닫기, 프로세스 정상 종료까지 §1과 동등한 깊이로 검증.
  1. 회귀 게이트 4종 실행: 예제검증.sh(25/25) · 웹소켓검증.sh(13/13, 신규 슬롯케이스 포함) ·
대응카드/동적웹검증.sh(7/7) · 대응카드/SQL검증.sh(13/13) — 전부 그린, 서버 프로세스/포트 잔류 없음 확인.
  1. 웹소켓카드.md §5 완료요약이 다른 세션 편집으로 최신화되어 있음을 확인(중복 작성 회피).
  2. 가드레일(~/.claude/templates/한선씨-가드레일.md)에 웹소켓 수정 항목 추가.
  3. crownycode-learn.sh add ws_resolve_fd_슬롯_fd_번역 학습 등록.
  4. crownyc.c 신규 로직에 대한 한선씨 동반: 실제 send()/recv()/poll()은 VM(C) 레벨에서만
가능하므로, 슬롯→fd 판별 로직 자체(할당됨/미할당 분기)를 순수 한선씨로 재현한 /Users/ef/CrownyOS/crownyc/WS슬롯fd번역.한선(검증 3케이스 전부 통과) 작성.

관련 파일

  • /Users/ef/CrownyOS/crownyc/crownyc.cws_resolve_fd()(sock_free 직후) + WS opcode 780~787 배선
  • /Users/ef/CrownyOS/crownyc/crownyc.c.bak-20260708-ws, crownyc.bak-20260708-ws — 수정 전 백업
  • /Users/ef/CrownyOS/crownyc/WS슬롯fd번역.한선 — 슬롯→fd 판별 로직 한선씨 동반 시뮬레이션
  • /Users/ef/crowny-rpnkit/라이브러리카드/웹소켓카드.md — §함정1/§수정내역/§5완료요약 갱신(타 세션 반영분 포함)
  • /Users/ef/crowny-rpnkit/라이브러리카드/웹소켓검증.sh — §2 슬롯 API 그린케이스로 재작성(PASS=13 FAIL=0)
  • /Users/ef/.claude/templates/한선씨-가드레일.md — 웹소켓 항목 추가

잔여 이슈

  • 웹소켓v2.한선WS서버생성()이 여전히 소켓생성(2)(1-arg, 부록A arity 버그)를 써서
스스로는 실패 — VM opcode 레벨은 이제 호환되므로 라이브러리 호출부를 소켓생성(2,1) 2-arg로 고치면 정상화될 가능성 높음(본 작업 범위 밖, 후속 과제로 카드에 기록됨).
  • WS바이너리(786) 버퍼핸들 vs 문자열핸들 불일치(§함정2)는 미수정(별개 이슈).
  • 다항곱NTT(opcode 944/945) 영역은 본 작업 중 컴파일 차단 해소 목적의 최소 수정만 함 —
해당 기능 자체의 완성도는 담당 세션 확인 필요(본 세션 범위 밖).
  • 크라우니 인프라가 다수(100+) 세션 동시편집 상태였음 — crownyc.c 같은 공유 VM 소스는
향후 편집 잠금/조율 메커니즘이 없으면 유사 충돌이 반복될 수 있음(세션 동기화 시스템 개선 여지).