`
Poechant
  • 浏览: 229751 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24336
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22105
社区版块
存档分类
最新评论

POCO库中文编程参考指南(3)Poco::Net::Socket

 
阅读更多

POCO库中文编程参考指南(3)Poco::Net::Socket

  • 作者:柳大·Poechant
  • 博客:Blog.CSDN.net/Poechant
  • 邮箱:zhongchao.ustc#gmail.com (# -> @)
  • 日期:April 14th, 2012

1 SelectMode

enum SelectMode
    /// The mode argument to poll() and select().
{
    SELECT_READ  = 1,
    SELECT_WRITE = 2,
    SELECT_ERROR = 4
};

2 SocketList

typedef std::vector<Socket> SocketList;

3 构造函数

未初始化的 socket:

Socket();

拷贝构造函数

Socket(const Socket& socket);

4 重载运算符

赋值运算符:

Socket& operator = (const Socket& socket);

比较运算符:

bool operator == (const Socket& socket) const;
bool operator != (const Socket& socket) const;
bool operator <  (const Socket& socket) const;
bool operator <= (const Socket& socket) const;
bool operator >  (const Socket& socket) const;
bool operator >= (const Socket& socket) const;

5 常用 socket 操作

返回该 socket 的可读数据的字节数,该操作不引起 socket 阻塞:

int available() const;

关闭 socket:

void close();

poll:

bool poll(const Poco::Timespan& timeout, int mode) const;
    /// Determines the status of the socket, using a 
    /// call to select().
    /// 
    /// The mode argument is constructed by combining the values
    /// of the SelectMode enumeration.
    ///
    /// Returns true if the next operation corresponding to
    /// mode will not block, false otherwise.

SocketImpl* impl() const;
    /// Returns the SocketImpl for this socket.

检查这个 socket 的连接是否是安全的(使用 SSL 或 TLS):

bool secure() const;

6 缓冲区

发送数据的缓冲区:

void setSendBufferSize(int size);
int getSendBufferSize() const;

接收数据的缓冲区:

void setReceiveBufferSize(int size);
int getReceiveBufferSize() const;

7 超时时间

发送数据的超时时间:

void setSendTimeout(const Poco::Timespan& timeout);
Poco::Timespan getSendTimeout() const;

接收数据的超时时间:

void setReceiveTimeout(const Poco::Timespan& timeout);
Poco::Timespan getReceiveTimeout() const;

8 其他接口

void setOption(int level, int option, int value);
void setOption(int level, int option, unsigned value);
void setOption(int level, int option, unsigned char value);
void setOption(int level, int option, const Poco::Timespan& value);
void setOption(int level, int option, const IPAddress& value);

void getOption(int level, int option, int& value) const;
void getOption(int level, int option, unsigned& value) const;
void getOption(int level, int option, unsigned char& value) const;
void getOption(int level, int option, Poco::Timespan& value) const;
void getOption(int level, int option, IPAddress& value) const;

void setLinger(bool on, int seconds);
void getLinger(bool& on, int& seconds) const;

void setNoDelay(bool flag);
bool getNoDelay() const;

void setKeepAlive(bool flag);
bool getKeepAlive() const;

void setReuseAddress(bool flag);
bool getReuseAddress() const;

void setReusePort(bool flag);
bool getReusePort() const;

void setOOBInline(bool flag);
bool getOOBInline() const;

void setBlocking(bool flag);
bool getBlocking() const;

获取 socket 的 IP 和端口:

SocketAddress address() const;

获取 peer socket 的 IP 地址和端口:

SocketAddress peerAddress() const;

9 静态函数

select:

static int select(SocketList& readList,
                  SocketList& writeList, 
                  SocketList& exceptList, 
                  const Poco::Timespan& timeout);

    /// Determines the status of one or more sockets, 
    /// using a call to select().
    ///
    /// ReadList contains the list of sockets which should be
    /// checked for readability.
    ///
    /// WriteList contains the list of sockets which should be
    /// checked for writeability.
    ///
    /// ExceptList contains a list of sockets which should be
    /// checked for a pending error.
    ///
    /// Returns the number of sockets ready.
    ///
    /// After return, 
    ///   * readList contains those sockets ready for reading,
    ///   * writeList contains those sockets ready for writing,
    ///   * exceptList contains those sockets with a pending error.
    ///
    /// If the total number of sockets passed in readList, writeList and
    /// exceptList is zero, select() will return immediately and the
    /// return value will be 0.
    ///
    /// If one of the sockets passed to select() is closed while
    /// select() runs, select will return immediately. However,
    /// the closed socket will not be included in any list.
    /// In this case, the return value may be greater than the sum
    /// of all sockets in all list.

检查是否支持 IPv4 或 IPv6:

static bool supportsIPv4();
static bool supportsIPv6();

-

转载请注明来自柳大的CSDN博客:Blog.CSDN.net/Poechant

-

分享到:
评论

相关推荐

    Visual c++网络高级编程 pdf+源代码

    10. **网络编程库的使用**:如ACE、Poco等第三方库,它们提供了丰富的网络编程接口,简化了开发过程。 总的来说,《Visual C++网络高级编程》是一本全面的指南,不仅讲解了网络编程的基本概念,还深入到高级主题,...

    vc++ 网络编程【资料大全】.rar

    《VC++网络编程指南》是一份详尽的资源集合,主要针对使用Visual C++进行网络编程的开发者。这个压缩包包含了大量的信息,旨在帮助程序员深入理解和应用C++语言进行网络通信。以下是一些核心知识点的详细说明: 1. ...

    C++网络编程文档

    在C++中,网络编程主要依赖于标准库中的`&lt;iostream&gt;`、`&lt;sstream&gt;`和第三方库如Boost.Asio或Poco.NET。这些库提供了处理套接字、网络连接和数据传输的功能。例如,Boost.Asio是一个强大的跨平台库,提供异步I/O操作...

    基于VC开发epoll程序方案和源码.rar

    3. **Linux Socket编程**:Socket是网络通信的基础,它提供了一种进程间通信(IPC)的方式,特别是在网络环境中。在Linux系统中,使用socket API进行网络编程,包括建立连接、发送和接收数据、错误处理等。 4. **跨...

    CppNetworkProgramVol_1

    8. **网络库的使用**:例如,Poco库提供了丰富的网络编程接口,简化了许多网络编程任务。 9. **设计模式与最佳实践**:在开发网络服务时,理解如何应用设计模式(如工厂模式、观察者模式)以及遵循最佳实践,如资源...

    VC.rar_C++ 聊天室_聊天室 c++_聊天室 vc

    3. **库文件**:可能使用了一些C++标准库,如iostream(输入/输出)、thread(多线程)、socket(网络编程)等,以及可能的第三方库,如QT或Poco库,用于图形界面和网络通信。 4. **资源文件**:可能包含GUI设计的...

    C++(转).rar_nat_内外网_端口_端口映射_端口映射c++

    5. **C++网络库**:可以使用第三方库如Poco、Boost.Asio或者libuv来简化C++中的网络编程。这些库提供了高级抽象,使开发者能够更方便地处理网络连接和端口映射。 实现端口映射的过程通常包括以下步骤: 1. **创建...

    组播发送接收,供初学者使用

    3. **Multicast_Send和Multicast_Received文件学习指南** - **Multicast_Send**:这个文件应该是实现组播发送功能的代码。你需要关注如何创建和配置组播套接字,设置组播选项,以及如何发送数据到组播地址。理解...

    VC++服务器

    然而,由于C++的跨平台特性,以及可能使用的第三方库如Boost或Poco的跨平台支持,这个服务器代码也有可能被移植到Linux系统上。在Linux上运行时,可能需要替换某些Windows特定的API调用,并使用类似POSIX的接口来...

    IMG_Transfer_via_UDP:该项目旨在通过TCPIP协议从计算机摄像头摄像机传输实时图像。 项目完成一半后,将提供详细信息

    标题中的"IMG_Transfer_via_UDP"是一个项目,其目标是实现通过UDP(用户数据报协议)在...等到项目完成后,可能还会涉及到文档编写,包括API参考、用户指南、安装和配置说明等,帮助其他开发者理解和使用这个项目。

Global site tag (gtag.js) - Google Analytics