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