文档章节

〇、linux网络内核调优:测试代码

for。
 for。
发布于 2016/07/23 09:55
字数 436
阅读 27
收藏 1
点赞 0
评论 0

测试代码为一个简单的回显程序

客户端

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define MAXLINE 4096
#define PORT 9000
#define HOST "0.0.0.0"

int bind_listen()
{
    int                 listenfd;
    struct sockaddr_in  servaddr;

    if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        return -1;
    }

    memset(&servaddr, 0x00, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(PORT);
    if (inet_pton(AF_INET, HOST, &servaddr.sin_addr) == -1) {
        close(listenfd);
        perror("inet_pton");
        return -1;
    }

    if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
        close(listenfd);
        perror("bind");
        return -1;
    }

    if (listen(listenfd, 20) == -1) {
        close(listenfd);
        perror("listen");
        return -1;
    }

    return listenfd;
}

void do_something(int sockfd)
{
    int     recvlen;
    char    buf[MAXLINE];

    while ((recvlen = read(sockfd, buf, MAXLINE)) > 0) {
        if (write(sockfd, buf, recvlen) < 0) {
            perror("write");
            return;
        }
    }

    if (recvlen == -1) {
        perror("read");
    } else if (recvlen == 0) {
        fprintf(stderr, "read EOF\n");
    }
}

int main(int argc, char **argv)
{
    int         listenfd, connfd;
    char        straddr[INET_ADDRSTRLEN];
    socklen_t   cliaddrlen;
    struct sockaddr_in  cliaddr;

    if ((listenfd = bind_listen()) == -1) {
        fprintf(stderr, "bind_listen error");
        exit(EXIT_FAILURE);
    }

    while (1) {
        cliaddrlen = sizeof(cliaddr);
        connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &cliaddrlen);
        if (connfd == -1) {
            perror("accept");
            continue;
        }

        fprintf(stderr, "connect from %s at PORT %d\n",
                inet_ntop(AF_INET, &cliaddr.sin_addr, straddr, sizeof(straddr)),
                ntohs(cliaddr.sin_port));

        do_something(connfd);

        close(connfd);
        fprintf(stderr, "close connfd\n");
    }

    return 0;
}

服务端

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define MAXLINE 4096
#define PORT 9000

int connect_server(const char *straddr)
{
    int     sockfd;
    struct sockaddr_in  servaddr;

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        return -1;
    }

    memset(&servaddr, 0x00, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(PORT);
    if (inet_pton(AF_INET, straddr, &servaddr.sin_addr) == -1) {
        perror("inet_pton");
        return -1;
    }

    if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == -1) {
        close(sockfd);
        perror("connect");
        return -1;
    }

    return sockfd;
}

void do_something(int sockfd)
{
    char    sendbuf[MAXLINE], recvbuf[MAXLINE];
    int     sendlen, recvlen;

    while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL) {

        sendlen = strlen(sendbuf);
        if (write(sockfd, sendbuf, sendlen) == -1) {
            perror("write");
            return;
        }

        if ((recvlen = read(sockfd, recvbuf, sizeof(recvbuf)-1)) < 0) {
            perror("read");
            return;
        } else if(recvlen == 0) {
            fprintf(stderr, "str_cli: read EOF\n");
            return;
        }

        recvbuf[recvlen] = '\0';

        fputs(recvbuf, stdout);
    }
}

int main(int argc, char **argv)
{
    int     sockfd;

    if (argc != 2) {
        fprintf(stderr, "usage: tcpcli <IPaddress>\n");
        return 0;
    }

    sockfd = connect_server(argv[1]);
    if (sockfd == -1) {
        fprintf(stderr, "connect_server %s error\n", argv[1]);
        exit(EXIT_FAILURE);
    }

    do_something(sockfd);

    close(sockfd);
    fprintf(stderr, "close sockfd\n");

    return 0;
}

© 著作权归作者所有

共有 人打赏支持
for。

for。

粉丝 80
博文 47
码字总数 18257
作品 0
深圳
程序员
linux+Oracle集群课程全面升级

作为国内最早从事开源架构师级课程研发的公司,从2006年10月开始,荣新稳步提升,将互联网运维作为主导就业方向,并将Linux集群架构课程发展成为国内最顶级、覆盖技术最全面的Linux课程,作为...

张琦
06/26
0
0
Linux未来监控tracing框架——eBPF

eBPF源于早年间的成型于 BSD 之上的传统技术 BPF(Berkeley Packet Filter)。BPF 的全称是 Berkeley Packet Filter,顾名思义,这是一个用于过滤(filter)网络报文(packet)的架构。 BPF 是在 ...

binarydady
05/07
0
0
linux系统调优-存储(内存、硬盘)

首先一个基本概念: 存储系统存储速度的快->慢: 内存->闪存->磁盘 因为内存的价格限制以及操作系统支持的限制,我们只能从磁盘这块来看,可见磁盘正是存储系统的最大瓶颈所在。 **下面具体提...

月黑风高杀人夜
2015/08/21
0
0
HDNL性能调优(4)故障点分析与工具准备

为深入调查系统运行状况,我们从CPU、内存、磁盘I/O等方面对各服务器的运行情况进行了指标收集和分析,具体情况如下: 为保证调优结果必须体现在迭代测试的过程中,我们对故障点的诊断采用了...

晨曦之光
2012/03/09
0
0
Linux 调试三剑客——strace,lsof,tcpdump

Brendan D. Gregg 专注 Linux performance & tuning 许多年,其博客 brendangregg.com 里关于分析和调优的干货琳琅满目。一篇名为 Linux Performance 文章全面而详细的整理了常用工具,覆盖了...

koala bear
2015/01/03
0
0
百度云英雄帖_高级运维开发工程师

职位描述 -中国最大最好的云存储服务欢迎你加入,如果你觉得使用起来有不爽的地方,除了反馈外,欢迎加入我们,一起改善;如果你有更好的优化建议,加入我们,一起打造更好的百度云服务。 工...

VnlyZhang
2014/12/16
0
1
系统诊断小技巧(7):利用Iptables进行排查和诊断的简易方案

TL;DR Iptables 严格说来,Iptables只是Linux系统防火墙用户空间的接口工具而已,但是,日常大家都以Iptables指称包括用户空间和内核空间在内的整个防火墙。这里我们也使用这个惯用法,但是,...

宁希波若
2017/08/24
0
0
调优 Haproxy 代理 Ceph

调优 Haproxy 代理 Ceph 今天同事告诉我安装的 Haproxy 代理 Ceph 通过压力测试软件压测的时候,使用与直接压主机的配置去压 Haproxy 的时候会被压死。 简单分析,确定调优方向 我们使用 Ce...

seal_90
07/06
0
0
如何提高 Linux 上 socket 性能

加速网络应用程序的 4 种方法 使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在本地网络上进行通信,也可以通过 Internet 在全球范围内进行通信。与其他 API 一样,您可以...

miffa
2014/12/16
0
0
linux-4.16.8源码目录分析

【仍然是操作系统实验作业..我哭】【都是google来的答案,我什么都不知道...】 1.arch:与体系结构相关的代码,里面存放了很多cpu架构,比如arm,x86,MIPS,PPC等。Linux支持的每种体系结构(对...

qq_40172927
05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

代码生成利器:IDEA 强大的 Live Templates

代码生成利器:IDEA 强大的 Live Templates

qwfys
13分钟前
0
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
17分钟前
0
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
19分钟前
0
0
日常运维--rsync同步工具

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

chencheng-linux
24分钟前
0
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
36分钟前
0
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
0
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
0
0
rsync工具介绍/rsync通过ssh同步

rsync工具介绍 数据备份是必不可少,在Linux系统下数据备份的工具很多,其中重点介绍就是rsync工具,rsync不仅可以远程同步数据,还可以本地同步数据,且不会覆盖以前的数据在已经存在的数据...

Hi_Yolks
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部