스톤에이지 8.0 구축 가이드 14
========================================================
14. 적용된 핵심 패치 — SAAC (saac/src/)
========================================================
SAAC 는 계정/캐릭터 서버입니다. 지수팩/죽창팩 공통으로 아래
지점들이 사설 환경에서 발목을 잡아 패치가 필요합니다.
--------------------------------------------------------
[ main.c : tcpstruct_init ]
--------------------------------------------------------
변경: 두 listen socket 에 SO_REUSEADDR 추가
이유: 재시작 시 TIME_WAIT 잔존 소켓 때문에 9301/9400 바인드
실패(不能开启TCP: -3 = EBIND). 약 60초 점유됨.
SO_REUSEADDR 로 즉시 재바인드 가능.
--------------------------------------------------------
[ main.c : addWorkerTask ]
--------------------------------------------------------
변경: cWork_write 실패 시 wk[n].use=0 + continue
이유: acwk 재시작 시 닫힌 fd 가 use=1,IDLE 로 남음. 그 slot
을 고르면 즉시 return -1(다음 slot 시도 안 함) ->
"server load too high". 정리 후 다음 슬롯 시도하게 수정.
--------------------------------------------------------
[ char.c : charListCallback ]
--------------------------------------------------------
변경: MySQL 실패해도 return 하지 않음
이유: auth_socket vs password 불일치로 SQL 실패 시 캐릭터
목록(CharList)이 통째로 막힘. DB 우회.
--------------------------------------------------------
[ recv.c : saacproto_ACCharLoad_recv ]
--------------------------------------------------------
변경: char.c 와 "동일한" MySQL 차단 우회
이유: 같은 차단 로직이 두 곳(char.c + recv.c)에 중복 존재.
char.c 만 고치면 캐릭터 목록은 떠도 "선택" 시 막힘.
누락 시 깨진 한자 다이얼로그가 뜸(21번 파일 참조).
--------------------------------------------------------
[ 인코딩 원칙 ]
--------------------------------------------------------
SAAC + 캐릭터 파일(*.char)은 GBK 고정. saac 측을 UTF-8 로
바꾸면 캐릭터 목록 안뜸/검정화면(30번 인코딩 경계 참조).
--------------------------------------------------------
다음: 15_패치_GMSV.txt

야추리아 님의 최근 댓글