linux listen()

listen(等待连接)
相关函数 socket,bind,accept,connect
表头文件
#include<sys/socket.h>
定义函数 int listen(int s,int backlog);
函数说明
listen()用来等待参数s
的socket连线。参数backlog指定同时能处
理的最大连接要求,如果连接数目达此上限则client端将收到
ECONNREFUSED的错误。Listen()并未开始接收连线,只是设置
socket为listen模式,真正接收client端连线的是accept()。通常
listen()会在socket(),bind()之后调用,接着才调用accept()。
返回值
成功则返回0,失败返回-1,错误原因存于errno
附加说明
listen()只适用SOCK_STREAM或SOCK_SEQPACKET的socket类型。如果socket为AF_INET则参数backlog
最大值可设至128。
错误代码 EBADF 参数sockfd非合法socket处理代码
EACCESS 权限不足
EOPNOTSUPP
指定的socket并未支援listen模式。

================================================================================

范例:

#include<sys/types.h> #include<sys/socket.h>
#include<netinet/in.h> #include<arpa/inet.h>
#include<unistd.h> #define PORT 1234 #define MAXSOCKFD 10 main() { int
sockfd,newsockfd,is_connected[MAXSOCKFD],fd; struct sockaddr_in addr; int
addr_len = sizeof(struct sockaddr_in); fd_set readfds; char buffer[256]; char
msg[ ] =”Welcome to server!”; if ((sockfd =
socket(AF_INET,SOCK_STREAM,0))<0){ perror(“socket”); exit(1); }
bzero(&addr,sizeof(addr)); addr.sin_family =AF_INET; addr.sin_port =
htons(PORT); addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sockfd,&addr,sizeof(addr))<0){ perror(“connect”); exit(1); }
if(listen(sockfd,3)<0){ perror(“listen”); exit(1); }
for(fd=0;fd<MAXSOCKFD;fd++) is_connected[fd]=0; while(1){
FD_ZERO(&readfds); FD_SET(sockfd,&readfds);
for(fd=0;fd<MAXSOCKFD;fd++) if(is_connected[fd]) FD_SET(fd,&readfds);
if(!select(MAXSOCKFD,&readfds,NULL,NULL,NULL))continue;
for(fd=0;fd<MAXSOCKFD;fd++) if(FD_ISSET(fd,&readfds)){ if(sockfd = =fd){
if((newsockfd = accept (sockfd,&addr,&addr_len))<0) perror(“accept”);
write(newsockfd,msg,sizeof(msg)); is_connected[newsockfd] =1; printf(“cnnect
from %s\n”,inet_ntoa(addr.sin_addr)); }else{ bzero(buffer,sizeof(buffer));
if(read(fd,buffer,sizeof(buffer))<=0){ printf(“connect closed.\n”);
is_connected[fd]=0; close(fd); }else printf(“%s”,buffer); } } } } 执行 $ ./listen
connect from 127.0.0.1 hi I am client connected closed.

linux listen(),布布扣,bubuko.com

时间: 2024-12-15 09:56:59

linux listen()的相关文章

【uWSGI】实战之Django配置经验

uWSGI 是应用服务器,实现了uwsgi, wsgi等协议.能够执行wsgi 应用 uwsgi 是协议名 Django配置 以下是自己常常常使用的一个配置模板.基于1.9以上的版本号使用的. 主要基于django应用 [uwsgi] djangoproject=/home/www/portal chdir=%(djangoproject) #virtualenv = /home/robc/.virtualenvs/workrave-cloud-server/ #pythonpath = %(d

NodeJs在linux下监听端口时抛错Error: listen EACCES

[email protected]:~/nodejs/lesson$ node random.js Random Number Generator Running- events.js:72         throw er; // Unhandled 'error' event               ^ Error: listen EACCES     at errnoException (net.js:904:11)     at Server._listen2 (net.js:102

linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)

linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表里 面找master进程,它的编号就是主进程号. ps -ef | grep nginx 查看进程 cat /usr/local/nginx/nginx.pid 每次修改完nginx文件都要重新加载配置文件linux命令: /usr/local/nginx -t //验证配置文件是否合法 若ngin

10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包

- 10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包 - 扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.html  - tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html  # 10.6 监控io性能 ![mark](http://oqxf7c508.bkt.clouddn.com/b

linux 安装与启动nginx

linux系统为Centos 64位 一.去http://nginx.org/download/上下载相应的版本下载nginx-1.8.0.tar.gz(注:还有更高版本的). 二.解压 tar -zxvf nginx-1.8.0.tar.gz 三.进入nginx-1.8.0/文件夹,设置一下配置信息 ./configure --prefix=/usr/local/nginx(安装后的文件存放路径). 四.配置的时候可能会出现类似这样的信息 ./configure: error: the HTT

搭建基于Nagios的监控系统——之监控远程Linux服务器

上一篇介绍了如何安装Nagios Core,这一篇跟大家分享一下如何将一台远程的Linux服务器加入纳入监控范围. 第一部分:在远程Linux上安装Nagios Plugins和NRPE   第一步:下载Nagios Plugins和NREP扩展的安装程序   [plain] view plain copy cd Downloads wget http://nagios-plugins.org/download/nagios-plugins-2.0.tar.gz 访问 http://www.na

Linux Socket编程-(转自吴秦(Tyler))

"一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信?

linux中部署django项目

通过Nginx部署Django(基于ubuntu) Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.nginx把所有静态请求自己来处理(这是NGINX的强项).然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求. 可见,uwsgi的作用就类似一个桥接器.起到桥梁的作用. Linux的强项

利用tinyproxy在Linux上搭建HTTP Proxy Server

之所以需要用到HTTP Proxy Server并不是为了要翻墙,而是为了让没有公网IP地址的内网主机通过有公网IP地址的外网主机访问Internet.举个例子,阿里云ECS在购买时可以不购买公网IP地址,但这种没有公网IP地址的ECS云主机(实例)是没有访问Internet的能力的,也就是说无法在这台实例上下载文件,这在部署应用如部署MySQL时可能遇到无法完成安装问题.解决的办法有两种,一种是在另一台具有公网访问能力的ECS实例上搭建VPN服务,另一种是在另一台具有公网访问能力的ECS实例上