我是靠谱客的博主 舒适爆米花,最近开发中收集的这篇文章主要介绍测试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调用的实际影响所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复