【发布时间】:2013-10-21 13:35:26
【问题描述】:
我正在为路由器编写代码。我已经设法从客户那里发送和接收信息。我现在要做的是创建一个向量来处理来自我拥有的接收包的线程的所有传入包。
我正在使用 C++ 和 BOOST。
int rawpacket_recv(int s, unsigned char *packet, int length)
{
int to_recv = 0;
to_recv = read(s, packet, length);
//and some error detection
}
void RecvThread(int *socket)
{
int eth_receiver, eth_socket;
eth_socket = *socket;
for(;;)
{
unsigned char *eth_buffer = (unsigned char *)malloc(1518);
eth_receiver = rawpacket_recv(eth_socket, eth_buffer, 1518);
//put eth_buffer into a vector defined in main
free(eth_buffer);
usleep(10000);
}
}
int main(int argc, char **argv)
{
vector<unsigned char *> packages;
int eth0socket;
char eth0 = "eth0";
eth0socket = CreateAndBindSocket(ETH_P_ALL, ð0socket, eth0); //Method from the program that does what it name describes
boost::thread eth0recvthread(RecvThread, ð0socket);
eth0recvthread.interrupt();
eth0recvthread.join();
return 0;
}
我在 sn-p 中留下了一些不重要的代码,但我想要的是 RecvThread 能够将接收到的包放入这个向量中,以便我可以在 main 方法中处理它们(现在)——大概作为互斥体/信号量工作。
谢谢!
【问题讨论】:
-
看起来像内存泄漏等待发生,加上竞争条件。
-
您应该尝试使用libtins。处理原始数据包可能会很痛苦。
-
也许一些提供并发数据结构的库也会有所帮助。
-
也许队列比向量更能处理传入的数据包?
-
@Jepessen 你可能是对的。不知道 C++ 有一个队列容器,因为我主要习惯于 C# 和 Java。我将给队列容器看看
标签: c++ function sockets vector insert