2013-04-12 2 views
0

서버에 40 개의 클라이언트로부터 지속적으로 데이터를 수신하는 소켓이 하나있는 udp 서버/클라이언트 응용 프로그램을 개발했습니다. 이제 40 명의 클라이언트 모두가 한 번에 데이터를 보내면 어떻게되는지 알고 싶습니다. 내 이해에 따르면, 데이터를 수신 버퍼에 대기열에 넣어야하고 다음에 recvfrom()을 호출하면 버퍼에 대기중인 데이터가 수신됩니다. 즉, recvfrom()을 호출하여 40 개의 모든 클라이언트 데이터를 수신해야합니다. 모든 클라이언트가 동시에 데이터를 보낸 경우 또한 40 클라이언트의 모든 데이터가 수신 버퍼에 대기하거나 일부 데이터가 삭제된다는 것을 알고 싶습니다. 또한 데이터가 수신 버퍼에 대기 할 수있는 최대 버퍼 크기는 얼마이며 데이터를 삭제할 수있는 최대 한도는 얼마입니까?udp 소켓의 수신 버퍼/큐의 최대 크기

답변

2

모든 클라이언트가 동시에 데이터를 보냈지 만 recvfrom()을 호출하여 40 개의 모든 클라이언트의 데이터를 수신해야합니다.

즉, 네트워크 스택에서 별도의 UDP 데이터 그램을 결합 할 수 있는지 여부를 묻습니다. 대답은 : 아니오, 별도의 데이터 그램으로 도착하여 recvfrom()을 별도로 호출해야합니다.

또한 40 클라이언트의 모든 데이터가 수신 버퍼에 대기하거나 일부 데이터가 삭제된다는 것을 알고 싶습니다.

UDP는 배달을 보장하지 않습니다. 패킷은 경로를 따라 어디에서나 전송 호스트, 경로상의 모든 장치 및 수신 호스트에 의해 삭제 될 수 있습니다.

또한 수신 버퍼에 데이터를 대기시킬 수있는 최대 버퍼 크기는 얼마이며 데이터를 삭제할 수있는 최대 한도는 얼마입니까?

이것은 일반적으로 구성 할 수 있습니다. 수신 호스트에 도달하기 전에 패킷이 삭제 될 수 있음을 명심하십시오.

+0

그래서 소켓에서 40 개의 클라이언트로부터 데이터가 도착하면 소켓 버퍼에 바로 버퍼링됩니까? recvfrom()에 대한 각 호출은 소켓 버퍼에서 데이터를 읽습니까? – Ayse

+2

적합하지 않으면 버려집니다. – EJP

2

실제로 OS 소켓 버퍼의 크기에 따라 다릅니다. 리눅스에서는 상당히 쉽게 구성 할 수 있으므로, 여러분의 Windows 시스템을 위해 그것을 변경하는 방법을 구글에 할 필요가있을 것입니다.

+0

따라서 소켓에있는 40 개의 클라이언트로부터 데이터가 도착하면 소켓 버퍼에 버퍼링됩니까? recvfrom()에 대한 각 호출은 소켓 버퍼에서 데이터를 읽습니까? – Ayse

+1

... 그리고 얼마나 자주 recvfrom()을 호출하는지. –

+1

@AyeshaHassan, 맞아. 운영 체제에 의해 유지되는 공유 소켓 버퍼가 있는데, recvfrom() 등을 통해 데이터를 가져옵니다. – rmn