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);
//如果建立连接,将产生一个全新的套接字
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什么意思的详细内容,更多请关注主机测评网其它相关文章!
本文来源:虚拟主机--linuxlisten(linux./什么意思)
本文地址:https://www.idcbaba.com/zhuji/2099.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。
标签:




