2010-04-06 4 views
3

UDP 소켓을 통해 C++로 약간의 데이터 프로세서를 개발 중이며,받은 소켓 정보를 처리하는 스레드가 하나 있습니다.C++ Winsock non-blocking/async UDP 소켓

동시에 소켓의 여러 클라이언트에서 정보를 받아야 할 때 제 문제가 발생합니다.

어떻게 내가 좋아하는 뭔가를 할 수있는 : C에서 여러 클라이언트 (동시 접속)에 대한

Socket foo; 
/* init socket vars and attribs */ 
while (serving){ 
thread_processing(foo_info); 
} 

를 ++?

저는 win32에서 winsock atm을 사용하고 있지만, 표준 차단 udp 소켓이 작동하고 있습니다. 아니 GUI, 그것은 콘솔 응용 프로그램입니다. 예제 나 포인터를 많이 사용하겠습니다.).

미리 감사드립니다.

답변

1

UDP 소켓은 recvfrom() 기능을 사용하여 여러 클라이언트로부터 데이터 그램을 수신 할 수 있습니다. 그냥 차단 수신, 요청을 읽고, 그것을 처리, 답변을 보내, 반복합니다. 처리가 매우 오랜 시간이 걸리지 않는 한 스레드가 필요하지 않습니다 (이 경우 스레드가 2 개의 대기열에 연결되어 있고 작동하지 않을 수 있습니다).

0

나는 큐에 요청을 넣고 다른 스레드가 큐에서 작동하도록하는 것이 가장 좋습니다. 이렇게하면 소켓 수신을 프로세스에서 분리 할 수 ​​있으므로 요구 사항이 변경 될 경우 더 많은 청취자와 처리 스레드로 확장 할 수 있습니다.