简单封装一个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初始化函数的主要内容,如果未能解决你的问题,请参考以下文章

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

Socket的简单使用

基于 TCP Socket 的服务器与客户端的简单连接

python编程系列---tcp服务端的简单实现

基于socket.io客户端与服务端的相互通讯

linux系统socket通信编程实践