FreeBSD 6.0架设管理与应用-第十八章 DHCP服务器
2010-08-16 16:03
459 查看
发送状态机比接收状态机相对要简单
send_machine.h
send_machine.cpp
send_machine.h
#ifndef MOOON_AGENT_SEND_MACHINE_H #define MOOON_AGENT_SEND_MACHINE_H #include <agent/config.h> AGENT_NAMESPACE_BEGIN class CAgentConnector; class CSendMachine { public: CSendMachine(CAgentConnector* connector); bool is_finish() const; util::handle_result_t continue_send(); util::handle_result_t send(const char* msg, size_t msg_size); void reset(); private: CAgentConnector* _connector; private: const char* _cursor; size_t _remain_size; }; AGENT_NAMESPACE_END #endif // MOOON_AGENT_SEND_MACHINE_H
send_machine.cpp
#include "send_machine.h" #include "agent_connector.h" AGENT_NAMESPACE_BEGIN CSendMachine::CSendMachine(CAgentConnector* connector) :_connector(connector) { reset(); } // 当前消息是否已经发送完 bool CSendMachine::is_finish() const { return 0 == _remain_size; } // 发送消息,可能是一个消息的第一次发送,也可能是一个消息的非第一次发送 util::handle_result_t CSendMachine::continue_send() { ssize_t bytes_sent = _connector->send(_cursor, _remain_size); if (bytes_sent > -1) { _cursor += bytes_sent; _remain_size -= bytes_sent; } return is_finish() ? util::handle_finish : util::handle_continue; } // 发送消息,总是一个消息的第一次发送 // 参数说明: // msg - 需要发送的消息 // msg_size - 需要发送的消息字节数 util::handle_result_t CSendMachine::send(const char* msg, size_t msg_size) { _cursor = msg; _remain_size = msg_size; return continue_send(); } void CSendMachine::reset() { _cursor = NULL; _remain_size = 0; } AGENT_NAMESPACE_END
相关文章推荐
- FreeBSD 6.0架设管理与应用-第二十二章 DNS 服务器
- FreeBSD 6.0架设管理与应用-第十三章 网页服务器
- FreeBSD 6.0架设管理与应用-第十四章 网页服务器进阶应用
- FreeBSD 6.0架设管理与应用-第十五章 FTP 服务器
- FreeBSD 6.0架设管理与应用-第五章 网络设定
- FreeBSD 6.0架设管理与应用-第六章 档案系统管理
- FreeBSD 6.0架设管理与应用-第二十四章 Shell Script
- FreeBSD 6.0架设管理与应用-第七章 系统安全
- BOOK]FreeBSD 6.0架设管理与应用
- FreeBSD 6.0架设管理与应用-第八章 编译核心
- FreeBSD 6.0架设管理与应用-第九章 系统调校
- FreeBSD 6.0架设管理与应用-附录 A /etc目录下的档案介绍
- FreeBSD 6.0架设管理与应用-第十章 软件安装
- FreeBSD 6.0架设管理与应用-附录B 制作FreeBSD安装光盘
- FreeBSD 6.0架设管理与应用-第十一章X Window 的使用
- FreeBSD 6.0架设管理与应用-第十二章 NAT 及防火墙
- FreeBSD 6.0架设管理与应用-第十六章 邮件服务器
- FreeBSD 6.0架设管理与应用-第一章 FreeBSD 简介
- FreeBSD 6.0架设管理与应用-第十七章 邮件服务器进阶应用
- FreeBSD 6.0架设管理与应用 [可下载电子文档]