2016-03-17 3 views
0

Я пытаюсь создать сокет для взаимодействия с клиентом и сервером.C: как создать сокет?

Я не очень хорошо разбираюсь в том, как работают функции socket() и bind(). Как создать сокет datagram?

Когда я пытаюсь скомпилировать его, он говорит, что адрес сокета никогда не будет NULL, а sockfd не будет использоваться.

int create_dg_socket(in_port_t port) { 

    int socket(int domain, int type, int protocol); 

    int bind(int sockfd, 
     const struct sockaddr *addr, 
     socklen_t len); 

    // Create the socket 
    int sockfd; 
    sockfd = socket(AF_INET, SOCK_DGRAM, 0); 

    if(socket==NULL) { 
    fprintf(stderr, "create_dg_socket not implemented!\n"); 
    exit(-1); 
    } 
} 
+0

Ваш код производит ошибку? Или ? –

+0

@devlincarnate yes – Iona

+1

Это опечатка: 'if (socket == NULL)' должно быть 'if (sockfd == NULL)'. И не объявляйте свои собственные прототипы для стандартных функций, таких как 'socket' и' bind'. Вместо этого включите правильный заголовок. ' в этом случае. – kaylum

ответ

2

Как создать сокет датаграмм?

Как это:

int create_dg_socket(in_port_t port) { 

    // Create the socket 

    int sockfd = socket(AF_INET, SOCK_DGRAM, 0); 
    if (sockfd == -1) { 
     fprintf(stderr, "create_dg_socket cannot create socket! Error: %d\n", errno); 
     return -1; 
    } 

    // Bind the socket port 

    struct sockaddr_in addr; 
    memset(&addr, 0, sizeof(addr)); 

    addr.sin_family = AF_INET; 
    addr.sin_port = htons(port); 
    addr.sin_addr.s_addr = INADDR_ANY; 

    if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) != 0) { 
     fprintf(stderr, "create_dg_socket cannot bind socket! Error: %d\n", errno); 
     close(sockfd); 
     return -1; 
    } 

    return sockfd; 
} 

int sockfd = create_dg_socket(port); 
if (sockfd == -1) { 
    //... 
    exit(-1); 
} 
+0

ты гений! – Iona

Смежные вопросы