IPerf源代码概述

一 点睛

1 IPerf是用C++实现的。

2 IPerf运用了面向对象的思想进行建模,主要用到了Linux系统编程中的Socket网络编程和多线程编程,因此可以从IPerf开源代码中学习到面向对象编程、Socket网络编程以及多线程编程技术。

3 从最简单的1.7.0版本的源代码开始学习。

4 代码结构如下

src目录

[root@localhost src]# tree
.
├── Audience.cpp
├── Audience.hpp
├── Audience.o
├── Client.cpp
├── Client.hpp
├── Client.o
├── Extractor.cpp
├── Extractor.hpp
├── Extractor.o
├── List.cpp
├── Listener.cpp
├── Listener.hpp
├── Listener.o
├── List.h
├── List.o
├── Locale.hpp
├── main.cpp
├── main.o
├── Makefile
├── Makefile.depends
├── Notify.cpp
├── Notify.hpp
├── Notify.o
├── PerfSocket.cpp
├── PerfSocket.hpp
├── PerfSocket.o
├── PerfSocket_TCP.cpp
├── PerfSocket_TCP.o
├── PerfSocket_UDP.cpp
├── PerfSocket_UDP.o
├── Server.cpp
├── Server.hpp
├── Server.o
├── service.c
├── service.h
├── Settings.cpp
├── Settings.hpp
├── Settings.o
├── Speaker.cpp
├── Speaker.hpp
├── Speaker.o
└── version.h

lib目录

[root@localhost lib]# tree
.
├── Condition.hpp
├── delay.cpp
├── delay.hpp
├── delay.o
├── endian.c
├── error.c
├── error.o
├── gettimeofday.c
├── gettimeofday.h
├── gnu_getopt.c
├── gnu_getopt.h
├── gnu_getopt_long.c
├── gnu_getopt_long.o
├── gnu_getopt.o
├── headers.h
├── inet_aton.h
├── inet_ntop.c
├── inet_pton.c
├── libdast.a
├── Makefile
├── Makefile.depends
├── Mutex.hpp
├── Queue.cpp
├── Queue.hpp
├── signal.c
├── signal.o
├── snprintf.c
├── snprintf.h
├── SocketAddr.cpp
├── SocketAddr.hpp
├── SocketAddr.o
├── Socket.cpp
├── Socket.hpp
├── Socket.o
├── sockets.c
├── sockets.o
├── stdio.c
├── stdio.o
├── string.c
├── string.o
├── tcp_window_size.c
├── tcp_window_size.o
├── Thread.cpp
├── Thread.hpp
├── Thread.o
├── Timestamp.hpp
└── util.h

二 IPerf开源代码总体分析

开发者把Socket编程和多线程编程经常用到的一些系统调用封装成对象,屏蔽了底层函数的复杂接口,提供了模块化和面向对象机制,也提供了一些实用的编程工具,我们可以在实现自己功能的时候复用这些类。

这些类的定义和实现都在源代码的lib子文件夹下,主要包括以下一些类:

说明

SocketAddr

封装了Socket接口中的网络地址接口以及各种地址转换的系统调用(gethostbyname、gethostbyaddr、inet_ntop等)

Socket

封装了socket文件描述符,以及socket、listen、connect等系统调用

Mutex

封装了POSIX标准中的mutex和condition线程同步机制

Thread

封装了POSIX标准中的多线程机制,提供了一种简单易用的线程模型

Timestamp

通过UNIX系统调用gettimeofday实现了一个时间戳对象,提供了获得当前时间戳,计算两个时间戳之间的先后关系等方法。

此外,还提供了实用工具函数,包括endian.c文件中的字节序转换函数、gnu_getopt文件中的命令行参数处理函数、snprintf文件中的字符串格式化函数、signal.c文件中与信号处理有关的函数、string.c文件中的字符串处理函数、tcp_window_size.c文件中的TCP窗口大小处理函数等。

 

你可能感兴趣的:(C++,C++)