C:如何创建套接字?

时间:2016-03-17 19:21:35

标签: c sockets datagram

我正在尝试为客户端和服务器创建一个套接字来与之通信。

我不太熟悉socket()和bind()的工作原理。如何创建数据报套接字?

当我尝试编译它时,它表示套接字的地址永远不会为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);
    }
}

1 个答案:

答案 0 :(得分: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);
}