2012-05-15 2 views
2

현재 작업중인 응용 프로그램은 여러 (현재 4 개) 포트 번호를 청취 할 수 있어야합니다. 다음과 같은 모든 포트에 대해 소켓을 만들어야합니까 :여러 UDP 포트에서 수신 대기하는 C/

if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { 
    perror("error: could not create UDP socket\n"); 
    exit(EXIT_FAILURE); 
} 

bzero(&sock_addr, sizeof(sock_addr)); 
sock_addr.sin_family = AF_INET; 
sock_addr.sin_port  = htons(port1); 
sock_addr.sin_addr.s_addr = inet_addr(INADDR_ANY); 

if(bind(sock_fd, (struct sockaddr *) &sock_addr, sock_len) < 0) { 
    perror("error: could not bind UDP socket to AU\n"); 
    exit(EXIT_FAILURE); 
} 

또는 더 우아한 방법이 있습니까? 또한 나는 select() 진술에 대해 읽었을 것이다. 여러 포트에서 수신 대기하는 이유는 간단합니다. 통신하고있는 애플리케이션을 식별해야합니다. 예 : 포트 당 하나의 응용 프로그램.

미리 의견을 보내 주셔서 감사합니다.

// 업데이트 : 포트 당 하나의 소켓을 어떻게 설정해야합니까?

답변

4

예, 통신 할 (IP, 포트) 숫자 쌍마다 별도의 소켓이 필요합니다.

예, 당신은 절대적으로 select() 함수를 사용할 수 있습니다 (언어의 일부분을 의미하는 "명령문"이 아닙니다. 라이브러리의 함수 일뿐입니다). 모두 설정 한 후에 여러 소켓을 처리해야합니다. 쪽으로.

+0

소켓 및 해당 포트를 설정하는 방법에 대한 간단한 소개를 제공 할 수 있습니까? 포트 당 하나의 소켓을 설정하려 할 때마다': Address already in use' 오류가 발생합니다. – nyyrikki

+0

다른 응용 프로그램에서 이미 사용중인 포트로 소켓을 바인드하려는 것일 수 있습니다. C 소켓에 대한 자세한 내용과 예제는 다음을 참고하십시오. http://www.linuxhowtos.org/C_C++/socket.htm – fduff

+1

SO_REUSEADDR 설정은 프로그램이 다운 된 것처럼 사용중인 포트에 많은 도움이됩니다. – Walter

관련 문제