2014-06-24 2 views
-3

Linux를 사용하는 동일한 컴퓨터에서 게임의 여러 인스턴스를 실행해야합니다. 게임은 지정한 포트 번호 (--port NUMBER을 명령 줄 명령에 사용)로 서버를 시작한 다음 각 플레이어가 그 포트에 연결하여 비슷한 방식으로 게임을 시작합니다.Linux에서 포트 가용성 확인

게임 서버와 게임 플레이어를 실행하기 위해 stdlib.h 시스템 라이브러리 함수 (system(const char *command))를 사용하는 작은 C 프로그램을 통해 수백 개의 게임을 병렬로 실행해야합니다.

내가 알아야 할 것은 : 해당 포트 번호로 게임 서버를 시작하기 전에 포트가 사용 가능한지 C 프로그램에서 확인할 수 있습니까? 내 프로그램 자체가 어떤 포트에도 구속되지 않는다는 것을 알아 두는 것이 중요하다. 실제로는 그 포트에 연결을 시도 할 프로그램을 시스템과 함께 실행한다.

+1

무엇을 시도 했습니까? 마음에 드는 첫 번째 일을 시도해 본다면, 이미 알고있는 포트를 소켓에 묶으 려한다면 이미 실패 할 것입니다. – luk32

답변

2

bind()를 직접 사용해야하며 성공하지 못하면 다른 포트를 시도 할 수 있습니다.

포트가 사용 가능한지 확인한 다음 바인딩이 불가능하고 경쟁 조건이 될 수 있는지 확인합니다. 포트가 사용 가능하지만 누군가 이미 사용했는지 확인했습니다.

/proc/net/tcp를 읽는 것이 도움이되지만 경쟁 조건이 계속 적용될 수 있습니다.

+0

멋진 설명. – yeyo

1

가장 간단한 방법은 일반적으로 포트를 열고 이미 사용 된 포트로 오류를 처리하는 것입니다. 좋은 예는 here

세 가지 간단한 단계를 찾을 수 있습니다 : 그것은

  • 그렇지 않으면 소켓을 true를 돌려 닫습니다 작동하는 경우는
  • 를 원하는 포트에 소켓을 엽니 다

    1. 시도를, false를 반환

    주어진 예에서는 원격으로 처리하지만 쉽게 변경할 수 있습니다.