2017-10-07 11 views
-2

C 소켓 프로그래밍에서 포트를 입력하지 않은 경우의 기본 포트 번호를 설정하려고합니다. 아무도 내가 이것을 어떻게 할 수 있는지 안다? 시도에서 세분화 오류가 계속 발생합니다.C 소켓 프로그래밍 없음 포트가 입력되었습니다.

코드 :! 나는 12345는 argc = 2에 기본 설정했지만, 나는 세그먼트 오류를 ​​얻을 수

#define PORT 12345 

int main(int argc, char *argv[]) { 

    /* Thread and thread attributes */ 
    pthread_t client_thread; 
    pthread_attr_t attr; 


    int sockfd, new_fd; /* listen on sock_fd, new connection on new_fd */ 
    struct sockaddr_in my_addr; /* my address information */ 
    struct sockaddr_in their_addr; /* connector's address information */ 
    socklen_t sin_size; 
    int i=0; 

    /* Get port number for server to listen on */ 
    if (argc != 2) { 
     fprintf(stderr,"usage: client port_number\n"); 
     exit(1); 
    } 

    /* generate the socket */ 
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { 
     perror("socket"); 
     exit(1); 
    } 

    /* generate the end point */ 
    my_addr.sin_family = AF_INET;   
    my_addr.sin_port = htons(atoi(argv[1]));  
    my_addr.sin_addr.s_addr = INADDR_ANY; 

. 어떤 도움을 주시면 감사하겠습니다!

+1

기본값을 설정하는 코드를 표시하면 해결하도록 도와 줄 수 있습니다. – Barmar

+2

"* argc! = 2 * 일 때 기본값을 12345로 설정해 보았습니다."어디에서? – alk

답변

5

조건부 표현식을 사용할 수 있습니다.

#define DEFAULT_PORT 12345 
my_addr.sin_port = htons(argc < 2 ? DEFAULT_PORT : atoi(argv[1])); 
+0

간결하고 명확합니다. 그러나 독자는'argv [1] '이 적절한 정수 포트 값으로 신뢰할 수 없다면'stroul()'과 같은 것이 더 강력하다는 것을 알아야합니다. 'atoi()'는''xyzzy ''를 잘 처리하지 않습니다 ... –