UDT问题咨询,如何使用UDT进行事件驱动开发

zhangkingsun 发布于 2016/10/09 12:34
阅读 82
收藏 0

@WolfCS 你好,想跟你请教个问题:你好,UDT如何像普通TCP一样进行事件驱动开发,比如一个线程以epoll作为底层事件发生器,在上面注册socket以及读写事件和回调函数处理连接上的数据通信?

加载中
0
WolfCS
WolfCS

UDT是有提供一套这样的接口啊,就像创建UDTSocket,和数据收发那样的接口一样(https://github.com/hanpfei/hudt/blob/master/src/udt.h):

// select and selectEX are DEPRECATED; please use epoll. 
UDT_API int select(int nfds, UDSET* readfds, UDSET* writefds, UDSET* exceptfds, const struct timeval* timeout);
UDT_API int selectEx(const std::vector<UDTSOCKET>& fds, std::vector<UDTSOCKET>* readfds,
                     std::vector<UDTSOCKET>* writefds, std::vector<UDTSOCKET>* exceptfds, int64_t msTimeOut);


UDT_API int epoll_create();
UDT_API int epoll_add_usock(int eid, UDTSOCKET u, const int* events = NULL);
UDT_API int epoll_add_ssock(int eid, SYSSOCKET s, const int* events = NULL);
UDT_API int epoll_remove_usock(int eid, UDTSOCKET u);
UDT_API int epoll_remove_ssock(int eid, SYSSOCKET s);
UDT_API int epoll_wait(int eid, std::set<UDTSOCKET>* readfds, std::set<UDTSOCKET>* writefds, int64_t msTimeOut,
                       std::set<SYSSOCKET>* lrfds = NULL, std::set<SYSSOCKET>* wrfds = NULL);
UDT_API int epoll_wait2(int eid, UDTSOCKET* readfds, int* rnum, UDTSOCKET* writefds, int* wnum, int64_t msTimeOut,
                        SYSSOCKET* lrfds = NULL, int* lrnum = NULL, SYSSOCKET* lwfds = NULL, int* lwnum = NULL);
UDT_API int epoll_release(int eid);

0
zhangkingsun
zhangkingsun

自己定义的callback函数里需要用UDT定义的那些接口函数吧,比如send,recv等等。

另外,如果是用SOCK_STREAM类型,那必须自己判断是否完整接收了一个数据包吧。

这些接口的使用跟TCP编程方式是一样的吧?谢谢。

返回顶部
顶部