MST

星途 面试题库

面试题:C语言中TCP服务器搭建之绑定端口

在Linux环境下使用C语言搭建TCP服务器,描述bind函数的作用以及其参数的含义,并且写出简单代码片段展示如何使用bind函数将服务器绑定到指定端口。
30.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

bind函数的作用

bind函数用于将套接字(socket)与特定的地址和端口绑定,使得服务器能够在指定的地址和端口上监听连接请求。

bind函数参数含义

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

  • sockfd:套接字描述符,由socket函数创建返回。
  • addr:指向一个包含要绑定地址的结构体指针。对于IPv4是struct sockaddr_in,对于IPv6是struct sockaddr_in6
  • addrlenaddr结构体的长度。

代码片段

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define PORT 8080
#define BACKLOG 5

int main(int argc, char const *argv[]) {
    int sockfd;
    struct sockaddr_in servaddr, cliaddr;

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }

    memset(&servaddr, 0, sizeof(servaddr));
    memset(&cliaddr, 0, sizeof(cliaddr));

    // 填充服务器地址结构
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = INADDR_ANY;
    servaddr.sin_port = htons(PORT);

    // 绑定套接字到指定地址和端口
    if (bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
        perror("bind failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    // 监听连接
    if (listen(sockfd, BACKLOG) < 0) {
        perror("listen failed");
        close(sockfd);
        exit(EXIT_FAILURE);
    }

    // 后续可进行accept等操作

    close(sockfd);
    return 0;
}