Chinaunix首页 | 论坛 | 博客
  • 博客访问: 750217
  • 博文数量: 741
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-18 11:18
文章分类

全部博文(741)

文章存档

2011年(1)

2008年(740)

我的朋友

分类:

2008-09-18 11:31:35

不甘寂寞,又开始封装 socket 模块,少量C++语法,构成简洁的网络接口模型,在这之上,可以封装更好的C++接口.
只需要变换 namespace 就可以切换UDP 和 TCP, 几乎不用修改任何代码.
底层适量使用 libevent 模型,方便跨平台切换 iocp, kqueue, epoll 等模型.

CODE:

struct ds_socket_pack
{
    int           socket_fd;
    const char*   address;
    int           port;
    struct sockaddr_in s_in;
    struct event* pevent;
} ;
typedef struct ds_socket_pack ds_socket_pack;

ds_socket_pack* ds_socket_init(const char* address, int port);
void            ds_socket_free(ds_socket_pack*);

namespace ds_socket_tcp
{
    int            ds_socket_client_init(ds_socket_pack*);
    int            ds_socket_server_init(ds_socket_pack*);
    void           ds_socket_client_run(ds_socket_pack*, void (*)(int, short, void *));
    void           ds_socket_server_run(ds_socket_pack*, void (*)(int, short, void *));
    void           ds_socket_dispatch(ds_socket_pack*);

    int  ds_recv(int fd, char**, int size, ds_socket_pack* = 0, int time_out = 0);
    int  ds_send(int fd, const char*, int size, ds_socket_pack* = 0);
    // for TCP, the last param is no useful
}
UDP

CODE:

namespace ds_socket_udp
{
    int ds_socket_server_init(ds_socket_pack* p);
    int ds_socket_client_init(ds_socket_pack* p);

    void ds_socket_client_run(ds_socket_pack*, void (*)(int, short, void *));
    void ds_socket_server_run(ds_socket_pack*, void (*)(int, short, void *));

    void ds_socket_dispatch(ds_socket_pack*);

    int  ds_recv(int fd, char**, int size, ds_socket_pack*, int time_out = 0);
    int  ds_send(int fd, const char*, int size, ds_socket_pack*);
}
.











.

[ 本帖最后由 DarkSpy 于 2008-6-25 10:40 编辑 ]

--------------------next---------------------

阅读(537) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~