【发布时间】:2013-07-31 16:08:00
【问题描述】:
我有一个在 linux 上用 c++ 编写的简单 tcp/ip 服务器。我正在使用异步套接字和 epoll。当我收到 EPOLLIN 事件时,是否可以找出有多少字节可供读取?
【问题讨论】:
-
为什么? recv() 会告诉你,也会给你数据。
-
嗯,有时知道缓冲区的大小会很方便,应该分配给读取。例如,在 kqueue 中,数据字段中返回的字节数。
-
恕我直言,您不应该为读取分配缓冲区。这只会产生垃圾、堆碎片等。您应该使用本地分配的字节数组。
-
但是,如果接收到的数据应该在其他线程中处理,我该怎么办?例如,我有一个带有一个线程的服务器,它接受网络连接、读取请求并将它们传输到另一个线程(甚至线程池),进行一些处理?
标签: c++ linux sockets asyncsocket