我是靠谱客的博主 舒适爆米花,最近开发中收集的这篇文章主要介绍测试listen(int sockfd,int backlog)中backlog参数对listen调用的实际影响,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <stdio.h>
#include <signal.h>         /*   --->signal()               */
#include <libgen.h>         /*   --->basename()             */
#include <stdlib.h>         /*   --->atoi()                 */
#include <sys/socket.h>     /*   --->socket()               */
#include <assert.h>         /*   --->assert()               */
#include <netinet/in.h>     /*   --->struct sockaddr_in     */
#include <string.h>         /*   --->bzero()                */
#include <arpa/inet.h>      /*   --->inet_pton()            */
#include <unistd.h>         /*   --->sleep()                */


enum bool{ false,true };  //枚举类型bool
static enum bool stop = false;


/* SIGTERM信号的处理函数,触发时结束主程序中的循环*/
static void handle_term( /* int sig */ )
{
    stop = true;
}


int main(int argc, char* argv[])
{
    signal(SIGTERM, handle_term);

    if( argc <= 3)
    {
        /* basename函数可以返回路径最后一个路径分隔符之后的内容,比如basename("/usr/local/abc") 返回 abc. */
        printf("usage: ./%s ip_address  port_number  backlogn",basename(argv[0]));
        return 1;
    }

    const char *ip = argv[1];
    int port = atoi(argv[2]);
    int backlog = atoi(argv[3]);

    int sock = socket(PF_INET,SOCK_STREAM,0); /* socket(),PF_INET,SOCK_STREAM in <sys/socket.h> */
    assert(sock >= 0);

    /* 构造一个IPv4的socket地址(套接字) */
    struct sockaddr_in address;
    bzero(&address,sizeof(address));
    address.sin_family = AF_INET;
    inet_pton(AF_INET,ip,&address.sin_addr); /* inet_pton() in <arpa/inet.h> */
    address.sin_port = htons((unsigned short int)port); /* htons() in #include <netinet/in.h> */

    int ret = bind(sock,(struct sockaddr *)&address,sizeof (address)); /* bind() in <sys/socket.h> */
    assert(ret != -1);

    ret = listen(sock,backlog);
    assert(ret != -1);

    /* 循环等待连接,直到有SIGTERM信号将它中断 */
    while (!stop) {
        sleep(1);
    }

    /* close socket */
    close(sock);

    return 0;
}

运行程序,查看结果后可得:内核中的监听队列的实际最大长度要比backlog所指定的数量要大一点。

 

最后

以上就是舒适爆米花为你收集整理的测试listen(int sockfd,int backlog)中backlog参数对listen调用的实际影响的全部内容,希望文章能够帮你解决测试listen(int sockfd,int backlog)中backlog参数对listen调用的实际影响所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部