在上篇博文中,我们讨论了tbnet库中的buffer结构,这部分内容很底层,一般给予上层应用的玩家很少能够接触到,而今天我们将要讨论另外一个也是很底层的东西,谈到socket,估计很多人都自己写过将要socket方面的东西,我很早之前使用过,当时给我的感觉就是一个字:烦,尤其是在对socket进行异步读写的时候,估计大部分人也有这种感觉,而如今很多的公司基本上都会对socket进行封装,给上层的应用提供接口支持,采用这种方式一个很大的优点就是:为上层开发者剔除掉了很大的一部分编码负担,那接下来,我们就来看看tbnet库的socket的实现吧,代码如下:
class Socket {
public:
...
bool setAddress (const char *address, const int port);
/*
* Á¬½Óµ½_addressÉÏ
*
* @return ÊÇ·ñ³É¹¦
*/
bool connect();
...
void close();
/*
* ¹Ø±Õ¶Áд
*/
void shutdown();
/**
* ʹÓÃUDPµÄsocket
*
* @return ÊÇ·ñ³É¹¦
*/
bool createUDP();
...
int getSocketHandle();
/*
* ·µ»ØIOComponent
*
* @return IOComponent
*/
IOComponent *getIOComponent();
/*
* ÉèÖÃIOComponent
*
* @param IOComponent
*/
void setIOComponent(IOComponent *ioc);
/*
* дÊý¾Ý
*/
int write(const void *data, int len);
/*
* ¶ÁÊý¾Ý
*/
int read(void *data, int len);
...
bool setKeepAlive(bool on) {
return setIntOption(SO_KEEPALIVE, on ? 1 : 0);
}
/*
* setReuseAddress
*/
bool setReuseAddress(bool on) {
return setIntOption(SO_REUSEADDR, on ? 1 : 0);
}
/*
* setSoLinger
*/
bool setSoLinger (bool doLinger, int seconds);
/*
* se