linuxlisten(linux./什么意思)

linuxlisten(linux./什么意思)

浏览次数:
信息来源: 用户投稿
更新日期: 2025-12-11 14:40:27
文章简介

listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:#includelt;sys/socket.hgt; intlisten(intsockfd,intba

2025阿里云双十一服务器活动

listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:

#include<sys/socket.h>

intlisten(intsockfd,intbacklog)参数sockfd是被listen函数作用的套接字参数backlog是侦听队列的长度。

在进程正在处理一个连接请求的时候,可能还存在其它的连接请求。因为TCP连接是一个过程,所以可能存在一种半连接的状态,有时由于同时尝试连接的用户过多,使得服务器进程无法快速地完成连接请求。如果这个情况出现了,服务器进程希望内核如何处理呢?内核会在自己的进程空间里维护一个队列以跟踪这些完成的连接但服务器进程还没有接手处理的连接(还没有调用accept函数的连接),这样的一个队列内核不可能让其任意大,所以必须有一个大小的上限。这个backlog告诉内核使用这个数值作为上限。

返回值

错误信息:

EADDRINUSE:另一个socket也在监听同一个端口。EBADF:参数sockfd为非法的文件描述符。ENOTSOCK:参数sockfd不是文件描述符。EOPNOTSUPP:套接字类型不支持listen操作。

#include<sys/types.h>

#include<netinet/in.h>

#include<sys/socket.h>

#include<sys/wait.h>

structsockaddr_inmy_addr;

structsockaddr_intheir_addr;

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

printf("createsocketerror");

//初始化结构体,并绑定2323端口

my_addr.sin_family=AF_INET;

my_addr.sin_port=htons(2323);

my_addr.sin_addr.s_addr=INADDR_ANY;

bzero(&(my_addr.sin_zero),8);

if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1)

perror("bindsocketerror");

//创建监听套接口监听队列长度为10

if(listen(sockfd,10)==-1)

sin_size=sizeof(structsockaddr_in);

linuxlisten,linux./什么意思

//如果建立连接,将产生一个全新的套接字

if((new_fd=accept(sockfd,(structsockaddr*)&their_addr,&sin_size))==-1)

printf("acceptsuccesshttps://www.fruan.com/post/n");

//生成一个子进程来完成和客户端的会话,父进程继续监听

printf("createnewthredsuccesshttps://www.fruan.com/post/n");

if((numbytes=recv(new_fd,buff,sizeof(buff),0))==-1)

//将从客户端接收到的信息再发回客户端

if(send(new_fd,buff,strlen(buff),0)==-1)

#include<sys/types.h>

#include<sys/socket.h>

intmain(intargc,char*argv[])

structsockaddr_intheir_addr;

//he=gethostbyname(argv[1]);

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

printf("createsocketerror.建立一个TCP套接口失败");

//初始化结构体,连接到服务器的2323端口

their_addr.sin_family=AF_INET;

their_addr.sin_port=htons(2323);

//their_addr.sin_addr=*((structin_addr*)he->h_addr);

inet_aton("127.0.0.1",&their_addr.sin_addr);

bzero(&(their_addr.sin_zero),8);

if(connect(sockfd,(structsockaddr*)&their_addr,sizeof(structsockaddr))==-1)

if(send(sockfd,"hello!socket.",6,0)==-1)

if((numbytes=recv(sockfd,buf,100,0))==-1)

printf("Recivefromserver:%s",buf);

}

推荐学习:《linux视频教程》

以上就是linuxlisten什么意思的详细内容,更多请关注主机测评网其它相关文章!

标签:
什么是Linuxwatch命令如何使用它+示例(linux的watch命令)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!