上一节简单的介绍了服务器消息处理的流程,想必大家对这方面有了初步的认识,接下来我们需要知道和掌握的便是其中一些重要的方法,进一步深入熟悉整个构架。
1、FD_*系列宏函数
FD_ZERO(fd_set *fdset) 将指定的文件描述符集清空,在对文件描述符集合进行设置前,必须对其进行初始化,如果不清空,由于在系统分配内存空间后,通常并不作清空处理,所以结果是不可知的。
FD_SET(fd_set *fdset) 用于在文件描述符集合中增加一个新的文件描述符。FD_CLR(fd_set *fdset) 用于在文件描述符集合中删除一个文件描述符。
FD_ISSET(int fd,fd_set *fdset) 用于测试指定的文件描述符是否在该集合中。
2、Socket操作类
/** * PAP Engine ( -- ) * $Id socket.h * @link -- for the canonical source repository * @copyright Copyright (c) 2013-2013 viticm( viticm@126.com ) * @license * @user viticm<viticm@126.com> * @date 2013-12-31 17:34:43 * @uses server net model socket class */ #ifndef PAP_SERVER_COMMON_NET_SOCKET_H_ #define PAP_SERVER_COMMON_NET_SOCKET_H_ #include "common/net/socket/base.h" namespace pap_server_common_net { class Socket { public: Socket(uint16_t port, uint32_t backlog = 5); ~Socket(); public: void close(); bool accept(pap_common_net::socket::Base* socket); uint32_t getlinger() const; bool setlinger(uint32_t lingertime); bool is_nonblocking() const; bool set_nonblocking(bool on = true); uint32_t getreceive_buffersize() const; bool setreceive_buffersize(uint32_t size); uint32_t getsend_buffersize() const; bool setsend_buffersize(uint32_t size); int32_t getid() const; protected: pap_common_net::socket::Base* socket_; }; }; //namespace pap_server_common_net #endif //PAP_SERVER_COMMON_NET_SOCKET_H_