简单封装一个linux socket服务端的listenfd初始化函数
Posted 狱典司
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单封装一个linux socket服务端的listenfd初始化函数相关的知识,希望对你有一定的参考价值。
简单封装一个linux socket服务端的listenfd初始化函数,方便快速调用:
/*创建 socket, 初始化lfd */
int initlistensocket(short port, int listen_limit, int non_block)
struct sockaddr_in sin;
int lfd = -1;
if((lfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
fprintf(stderr, "%s: socket init failed, %s\\n", __func__, strerror(errno));
return -1;
//将socket设为非阻塞
if(non_block && fcntl(lfd, F_SETFL, O_NONBLOCK) < 0)
fprintf(stderr, "%s: fcntl nonblocking failed, %s\\n", __func__, strerror(errno));
return -1;
memset(&sin, 0, sizeof(sin)); //bzero(&sin, sizeof(sin))
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(port);
if(bind(lfd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
fprintf(stderr, "%s: bind failed, %s\\n", __func__, strerror(errno));
return -1;
if(listen(lfd, listen_limit) < 0)
fprintf(stderr, "%s: listen failed, %s\\n", __func__, strerror(errno));
return -1;
return lfd;
initlistensocket()参数说明
short port
—— 服务器开启的监听端口int listen_limit
—— listen()函数的连接队列容量(两队列总容量)int non_block
—— 置1则listenfd设为非阻塞,置0则默认阻塞
initlistensocket()返回值
成功调用的情况下返回监听文件描述符, 出错则打印errno并返回-1;
以上是关于简单封装一个linux socket服务端的listenfd初始化函数的主要内容,如果未能解决你的问题,请参考以下文章