64,281
社区成员
发帖
与我相关
我的任务
分享
typedef struct _tag_task
{
int fd;
int epollFd;
}TASK;
void* thread_read(void* args)
{
TASK* pTask = (TASK*)args;
char szBuf[256];
read(pTask->fd, szBuf, sizeof(szBuf));
free(pTask);
}
int main(int argc, const char *argv[])
{
int nEpollFd;
int nListenFd;
struct epoll_event ev;
while (true)
{
int nFdNum = epoll_wait(nEpollFd, &ev, 1, -1);
if (nFdNum > 0)
{
if (ev.data.fd == nListenFd)
{
int nFd = accept(nListenFd, 0, 0);
if (nFd == EOF)
{
continue;
}
ev.data.fd = nFd;
ev.events = EPOLLET|EPOLLIN;
epoll_ctl(nEpollFd, EPOLL_CTL_ADD, nFd, &ev);
// epoll_ctl add socket
}
else if (ev.events & EPOLLOUT)
{
pthread_t pid;
TASK* pTask = (TASK*)malloc(sizeof(TASK));
pTask->fd = ev.data.fd;
pTask->epollFd = nEpollFd;
pthread_create(&pid, NULL, thread_read, pTask);
}
}
}
return 0;
}
[quote=引用 5 楼 mujiok2003 的回复:] [quote=引用 3 楼 chp845 的回复:] [quote=引用 2 楼 mujiok2003 的回复:]避免这种情况。 一个fd/socket在一个线程中处理, 不要跨线程, 这样事情将简单的多。 但是遇到一个多线程读取socket的问题
[quote=引用 3 楼 chp845 的回复:] [quote=引用 2 楼 mujiok2003 的回复:]避免这种情况。 一个fd/socket在一个线程中处理, 不要跨线程, 这样事情将简单的多。 但是遇到一个多线程读取socket的问题
避免这种情况。 一个fd/socket在一个线程中处理, 不要跨线程, 这样事情将简单的多。 但是遇到一个多线程读取socket的问题
[quote=引用 2 楼 mujiok2003 的回复:]避免这种情况。 一个fd/socket在一个线程中处理, 不要跨线程, 这样事情将简单的多。 但是遇到一个多线程读取socket的问题
但是遇到一个多线程读取socket的问题