• Daum
  • |
  • 카페
  • |
  • 테이블
  • |
  • 메일
  • |
  • 카페앱 설치
 
카페정보
(머드게임) 안개무한 - 무한대전
 
 
 
카페 게시글
자유 게시판 소켓통신 호환성 검토
라이트레트로 추천 0 조회 22 23.09.28 21:18 댓글 2
게시글 본문내용
 
다음검색
댓글
  • 23.10.03 19:12

    첫댓글 안녕하세요. 예제설명해 주셔서 감사합니다. 근데 실제 게임 소스를 보면 FD_ISSET과 상관없이
    for(i=0; i<Tablesize; i++) 이런식으로 처리되는 부분이 아주 많이 있거든요. Tablesize는 최대 동시접속자수라고 생각하시면 돼요. 256명이 기본 설정값이고요.

    리눅스에서는 소켓이 0번부터 시작해서 하나씩 올라가기 때문에 그냥 저렇게 for문을 써서 돌려도 상관없는 것 같고요.
    윈도에서는 소켓이 임의의 숫자부터 시작하기 때문에 그냥 0부터 for문을 돌리면 안되고 소켓 핸들을 따로 관리해주어야 할 필요가 있는 것으로 이해하고 있습니다.

    단순히 한군데만 수정해서 해결가능하면 좋겠지만 저런식으로 사용되는 곳이 게임 소스에 아주 많이 있어요.
    while문을 사용하는 곳도 있고 아예 player[i] 이런식으로 사용자 구조체에 아예 소켓 번호를 직접 넣어서 사용하는 부분도 아주 많습니다.

  • 23.10.03 19:27

    윈도 7에서는 대부분의 경우 맨처음 접속자의 소켓 핸들이 0이 아니라 120부터 시작하더라고요. 여전히 256보다는 작기 때문에 여태까지는 for문을 돌릴때 문제가 없었습니다. 물론136명넘게 접속하면 문제가 될수도 있었겠지만 여태까지 윈도에서는 혼자 즐기는 경우만 있었기 때문에 발견 못했던 거고요.

    윈도 10에서는 보통 256보다 좀 높은 (512보다는 작은) 값에서 시작합니다. 가끔 256보다 낮은 값에서 시작하면 접속가능하고요.

    아무튼 소스를 전체적으로 다 살펴보고 일일이 수정해야 하는데 시간도 많이 걸리는 일이고, 혹시 빼먹는 부분이 있다해도 컴파일에는 문제가 없기 때문에 나중에 다시 찾아내기도 쉽지 않습니다.

    임시 방편으로 Tablesize를 512정도로 높이는 방법이 있을수 있는데, 실제로 해보니 잘 안되더라고요. 어디서 문제가 발생하는지는 소스를 좀 더 자세히 분석해 봐야할것 같고요.

    다른 방법으로는 서버를 시작할때 첫번째 소켓 핸들값이 256보다 작게 나올때까지 무한루프 돌리는 것도 가능합니다. 서버가 실행되면 접속도 잘되고 게임도 잘 됩니다. 그런데 가끔가다 저 조건을 만족하지 못해서 서버 시작하는데 시간이 오래걸리는 경우가 있어요.

최신목록