오래 지속되는 연결을 갖는 UDP 서버 아키텍처의 경우 하나의 아키텍처는 들어오는 모든 UDP 트래픽을 수신 대기하는 소켓 connect()를 사용하여 원격지 주소를 설정하는 각 연결마다 별도의 소켓을 작성하십시오. 내 질문은 accept()가 TCP에 대해하는 것과 원자 적으로 비슷한 일을 할 수 있는지 여부이다.UDP (지연된 UDP 소켓 설정시 타이밍 문제)에 대한 accept() 에뮬레이트
별도의 소켓을 만들고 connect()를 사용하는 이유는이 기능을 사용하면 패킷 처리를 여러 스레드에 분산시키고 소켓을 필요한 데이터 구조와 직접적으로 쉽게 연결할 수 있기 때문입니다 처리를 위해. 네트워킹 스택의 디 멀티플렉싱 논리는 들어오는 패킷을 가장 특정한 소켓으로 라우팅합니다.
지금 내 질문은 하나가 동의를 모방하고자 할 때이 같은 UDP()에 발생하는 기본적으로 :
사용은 UDP 서버 소켓을 포함하는 FD-세트()을 선택합니다.
그런 다음 UDP 서버 소켓에서 패킷을 읽습니다.
- 그때 그때
내가 모두 소켓을 포함하는 FD-세트()를 선택 원격 호출 어드레스() ED를 연결하는 새로운 UDP 소켓을 생성한다.
무엇이 반환됩니까?
어딘가에 OS에 도착, 또는이 3에서 만든 더 구체적인 소켓에 역 다중화 될 것이라고 주어진 즉, 어떤 시점에서 디 멀티 플렉스가 발생합니까? 패킷이 도착할 때, 또는 그것이 마치 "마치"4 번 지점에 도착해야합니까?
위의 경우 작동하지 않는 경우 추가 질문 : 이것을 수행하는 가장 좋은 방법은 무엇입니까?
다른 쪽 끝과 연결된 새 UDP 소켓을 만들 수도 있지만 동일한 서버 쪽 포트를 유지 하시겠습니까? 일반적으로 서버 측의 다른 포트에 UDP 소켓을 만들고, "서버 소켓"은 초기 요청에만 사용되며, 2 개의 다른 포트에서 추가로 통신이 이루어집니다. 또는 단지 서버에 1 개의 소켓을 사용하고 연결하는 데 신경 쓰지 마십시오. 동료 주소를 기록하면됩니다. UPD는 어쨌든 연결이되지 않습니다. – nos