当前位置: 技术问答>linux和unix
一个关于poll与线程的问题
来源: 互联网 发布时间:2016-04-10
本文导语: 主线程接受连接,并且poll所有连接的pollin事件,处理客户端发送过来的数据: client[max_fd].events = POLLIN; int ready = poll (client, max_fd + 1, timeout); recv(fd); 另外开了一个线程,用主线程的连接句柄进行数据发送 send(f...
主线程接受连接,并且poll所有连接的pollin事件,处理客户端发送过来的数据:
client[max_fd].events = POLLIN;
int ready = poll (client, max_fd + 1, timeout);
recv(fd);
另外开了一个线程,用主线程的连接句柄进行数据发送
send(fd);
现在问题是如果接受客户端数据没有问题,但是发送线程一调用send(fd),主线程poll就会返回1,并且在该fd句柄上报pollerr和pullhup错误,但是数据确实通过socket发送到客户端了,但是我主线程收到pollerr之后就只好关闭连接了
为什么fd上在poll会报错呢?
谢谢各位指点,感谢先
client[max_fd].events = POLLIN;
int ready = poll (client, max_fd + 1, timeout);
recv(fd);
另外开了一个线程,用主线程的连接句柄进行数据发送
send(fd);
现在问题是如果接受客户端数据没有问题,但是发送线程一调用send(fd),主线程poll就会返回1,并且在该fd句柄上报pollerr和pullhup错误,但是数据确实通过socket发送到客户端了,但是我主线程收到pollerr之后就只好关闭连接了
为什么fd上在poll会报错呢?
谢谢各位指点,感谢先
|
注意,
发送的socket不要加入到Poll里面,
这样发送就不会影响poll了。
发送的socket不要加入到Poll里面,
这样发送就不会影响poll了。