libev做TCPserver中的recv处理问题

guolisen 2012-12-13 03:57:43
libev做TCPserver中的recv处理问题

请问下我建立NOBLOCK的socket,并建立watcher加入到libev,在回调中accept,并将返回的fd传递到线程,在线程里面recv数据,可是每次recv数据都返回WSAEWOULDBLOCK,不断recv才会成功(貌似是client端第二次发送)

看过一些例子,accept后的fd也要加入libev去等待读数据吗?谢

下面是libev回调函数

void io_callback(LoopHandle loop, CBHandle w, int revents)
{

SOCKET fd = w->fd;
#ifdef LWDP_PLATFORM_DEF_WIN32
fd = _get_osfhandle (w->fd);
#endif

struct sockaddr_in addr;
int addr_size = sizeof(addr);
int* accept_conn = (int*)malloc(sizeof(int));
while ((*accept_conn = accept(fd, (struct sockaddr *)&addr, &addr_size)) < 0)
{
if (errno == EAGAIN)
{
//these are transient, so don't log anything.
continue;
}
else
{
LWDP_LOG_PRINT("TCPSERVER", LWDP_LOG_MGR::ERR,
"Accept Error.");
return;
}
}


pthread_t t;
int result;

result = pthread_create(&t, NULL, thread_callback, accept_conn);
if(result != 0){
LWDP_LOG_PRINT("TCPSERVER", LWDP_LOG_MGR::ERR,
"Can't Create Thread Ret: %d\n", result);
return;
}

result = pthread_detach(t);
if(result != 0){
LWDP_LOG_PRINT("TCPSERVER", LWDP_LOG_MGR::ERR,
"Can't Detach Thread Ret: %d\n", result);
return;
}

}
...全文
130 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧