2013-03-06 3 views
-4

에 실패를 반환바인드는 다음과 같은 코드를 생각해 UDP 포트

iSocket = socket(PF_INET, SOCK_DGRAM, 0); 
memset(&sSocketAddr, 0, sizeof(sSocketAddr)); 

sSocketAddr.sin_family = AF_INET; 
sSocketAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
sSocketAddr.sin_port = htons(10003); 
Res = bind(iSocket, (struct sockaddr *)&sSocketAddr, sizeof(struct sockaddr_in)); 

위의 코드를 바인드 수익률 -1. 그러나 다른 포트 번호의 경우 0 (오류 없음)을 반환합니다. UDP 클라이언트 요구 사항에 따라 10003을 사용해야합니다. 이것이 어떻게 작동 될 수 있습니까?

+3

당신이 실제 오류를 확인 했 (인쇄 기능 및 stdio.h) #include<errno.h> 싶어 수도 perror는 또는 함수 strerror (http://www.beej.us/guide/bgnet/output/html/multipage/perrorman.html)

if (Res == -1) { // some error has occurred // prints "socket error: " + the error message: perror("socket error"); } 

을 같은 프리미티브를 사용할 수 있습니다? – Corbin

+1

실제 오류는 무엇입니까 *입니까? 가장 중요한 모든 정보를 생략 할 때 사람들이 이와 같은 질문에 대답 할 것이라고 기대할 수는 없습니다. – EJP

+0

아마도 다른 일부 응용 프로그램이 해당 포트에서 수신 대기 중일 수 있습니다. 당신은'netstat -a | grep "49184"' – niculare

답변

4

으로 바인드 man 페이지 (http://linux.die.net/man/2/bind)에서 말했다 : 오류에

, -1이 리턴되며, errno는 적당한 값으로 설정된다. 나는 그것이 모든 POSIX 전화의 표준 절차라고 생각

는 실제 오류의 값을 포함하는 정수의 이름 errno에있다. 당신은 수동으로 값을 확인하거나

+0

고마워. 문제를 찾았습니다. – code8230