当前位置: 首页 > news >正文

长沙公司做网站/如何获取网站的seo

长沙公司做网站,如何获取网站的seo,网站验证码代码,网站抢购外挂软件怎么做二、前面我们实现的能够并发服务的服务器端程序是使用fork出多个子进程来实现的,现在学习了select函数,可以用它来改进服务器端程序,实现单进程并发服务。先看如下程序,再来解释: C Code 1234567891011121314151617181…

二、前面我们实现的能够并发服务的服务器端程序是使用fork出多个子进程来实现的,现在学习了select函数,可以用它来改进服务器端程序,实现单进程并发服务。先看如下程序,再来解释:

C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*************************************************************************
    > File Name: echoser.c
    > Author: Simba
    > Mail: dameng34@163.com 
    > Created Time: Fri 01 Mar 2013 06:15:27 PM CST
 ************************************************************************/


#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<string.h>
#include<signal.h>
#include<sys/wait.h>
#include "read_write.h"

#define ERR_EXIT(m) \
    do { \
        perror(m); \
        exit(EXIT_FAILURE); \
    } while (0)


int main(void)
{
    
    signal(SIGPIPE, SIG_IGN);
    int listenfd; //被动套接字(文件描述符),即只可以accept, 监听套接字
    if ((listenfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
//  listenfd = socket(AF_INET, SOCK_STREAM, 0)  
        ERR_EXIT("socket error");

    struct sockaddr_in servaddr;
    memset(&servaddr, 0sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(5188);
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    /* servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); */
    /* inet_aton("127.0.0.1", &servaddr.sin_addr); */
    
    int on = 1;
    if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0)
        ERR_EXIT("setsockopt error");

    if (bind(listenfd, (struct sockaddr*)&servaddr,sizeof(servaddr)) < 0)
        ERR_EXIT("bind error");

    if (listen(listenfd, SOMAXCONN) < 0//listen应在socket和bind之后,而在accept之前
        ERR_EXIT("listen error");
    
    struct sockaddr_in peeraddr; //传出参数
    socklen_t peerlen = sizeof(peeraddr); //传入传出参数,必须有初始值
    
    int conn; // 已连接套接字(变为主动套接字,即可以主动connect)
    int i;
    int client[FD_SETSIZE];
    int maxi = 0// client数组中最大不空闲位置的下标
    for (i = 0; i < FD_SETSIZE; i++)
        client[i] = -1;

    int nready;
    int maxfd = listenfd;
    fd_set rset;
    fd_set allset;
    FD_ZERO(&rset);
    FD_ZERO(&allset);
    FD_SET(listenfd, &allset);

    while (1) {
        rset = allset;
        nready = select(maxfd + 1, &rset, NULLNULLNULL);
        if (nready == -1) {
            if (errno == EINTR)
                continue;
            ERR_EXIT("select error");
        }

        if (nready == 0)
            continue;

        if (FD_ISSET(listenfd, &rset)) {
        
            conn = accept(listenfd, (struct sockaddr*)&peeraddr, &peerlen);  //accept不再阻塞
            if (conn == -1)
                ERR_EXIT("accept error");
            
            for (i = 0; i < FD_SETSIZE; i++) {
                if (client[i] < 0) {
                    client[i] = conn;
                    if (i > maxi)
                        maxi = i;
                    break;
                } 
            }
            
            if (i == FD_SETSIZE) {
                fprintf(stderr, "too many clients\n");
                exit(EXIT_FAILURE);
            }

            printf("recv connect ip=%s port=%d\n", inet_ntoa(peeraddr.sin_addr),
                ntohs(peeraddr.sin_port));

            FD_SET(conn, &allset);
            if (conn > maxfd)
                maxfd = conn;

            if (--nready <= 0)
                continue;
        }

        for (i = 0; i <= maxi; i++) {
            conn = client[i];
            if (conn == -1)
                continue;

            if (FD_ISSET(conn, &rset)) {
                
                char recvbuf[1024] = {0};
                int ret = readline(conn, recvbuf, 1024);
                if (ret == -1)
                    ERR_EXIT("readline error");
                else if (ret  == 0) { //客户端关闭 
                    printf("client close \n");
                    FD_CLR(conn, &allset);
                    client[i] = -1;
                    close(conn);
                }
        
                fputs(recvbuf, stdout);
                writen(conn, recvbuf, strlen(recvbuf));
                
                if (--nready <= 0)
                    break
            }
        }


    }
        
    return 0;
}
http://www.lbrq.cn/news/1381231.html

相关文章:

  • 17我们一起做网站/微信朋友圈广告投放
  • 南昌建站方案/详情页设计
  • 网站加友情链接/推广竞价账户托管
  • 做网站啦代理的方法/电商运营数据六大指标
  • 陕西网站建设通报/网站技术解决方案
  • 七里河微信网站建设/百度双十一活动
  • 用nas做网站/企业seo排名哪家好
  • 学校网站群建设思路/游戏优化大师下载安装
  • php网站开发wamp/宁波seo关键词费用
  • 网站客户体验/seo难不难学
  • 武汉网站制作成功案例/网络营销岗位有哪些
  • 做响应式网站怎么设计/对网络推广的理解
  • 山东网站建设哪家好/百度关键词优化软件排名
  • 建网站卓/外链网
  • 建设银行网站修改手机号码/搜索引擎优化的主要工作
  • 做网站赚钱不/网站建设品牌公司
  • 句容网络公司/seo外链购买
  • 如何来建设网站/代写文章哪里找写手
  • 注册网站域名有什么用/产品如何做网络推广
  • 网站建设中最基本的决策/怎么样优化网站seo
  • 南宁横县网站建设推广/app推广方式有哪些
  • 自动生成图片的网站/个人网站免费推广
  • 推广的注意事项/seo管理与优化期末试题
  • 公司网站可以自己做吗/引流推广公司
  • 进网站备案时间/链接生成二维码
  • 企业网站建设步骤/郑州seo服务
  • 网站开发框架有哪些/网站推广技术
  • 车辆租赁的网站建设/搜索指数的数据来源是什么
  • 女生做网站运营累不累/天津网站优化公司
  • wordpress作者增加页面权限/亚马逊关键词优化怎么做
  • TwinCAT3示例项目1
  • 下载一个JeecgBoot-master项目 导入idea需要什么操作启动项目
  • 数字通信原理--数字通信仿真基础
  • O2OA 平台:助力企业在信创浪潮下实现高效国产化转型
  • 【AI论文】单一领域能否助力其他领域?一项基于数据的、通过强化学习实现多领域推理的研究
  • C++菱形虚拟继承:解开钻石继承的魔咒