发送原始eth包。什么时候我应该关闭套接字?

时间:2012-07-18 18:01:03

标签: c sockets network-programming raw-sockets

我通过从nfqeueue获取数据包,打开socket到eth卡并发送数据包(我在中间有一些逻辑)来实现桥接。

我是cpp和低级别的新手,所以我可能会问愚蠢的问题。

如果我理解正确,我不应该为每个数据包打开 - 关闭套接字。 我根据这个例子编写了我的代码 - http://austinmarton.wordpress.com/2011/09/14/sending-raw-ethernet-packets-from-a-specific-interface-in-c-on-linux/

我打开这样的插座:

sockfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW))

我的问题是: 1. 套接字活了多长时间? 2.我如何检查插座是否仍然打开? 3.我怎么关闭它?我看到了关机,但我不知道这是否是API? 4.有人可以指导我在生产水平上的一个例子。意味着处理套接字异常...

谢谢

1 个答案:

答案 0 :(得分:2)

只要您有要发送或接收的帧,请保持该套接字打开。正常close(2)关闭套接字。这是另一个原始套接字教程 - http://www.tenouk.com/Module43a.html

shutdown(2)只对TCP有意义,而不是与此相关。

编辑0:

没有联系,你在这里谈论以太网。

请自己帮个忙,阅读本书 - 由W. Richard Stevens撰写的TCP/IP Illustrated, Volume 1: The Protocols. - 将为您节省大量的困惑。