如何将SOCK_DGRAM转换成SOCK_RAW?

时间:2014-11-27 06:20:39

标签: c sockets udp rtp

我正在开源,其中SOCK_DGRAM用于发送RTP数据包。

像这样:

 int sock = socket(af, SOCK_DGRAM, 0);

但是我应该使用与SOCK_RAW相同的套接字来发送我准备的UDP数据包。

是否可以将UDP套接字转换为RAW套接字?

如果可以的话怎么办?

提前致谢

1 个答案:

答案 0 :(得分:0)

我不知道您说need to use same socket的原因,否则,您可以按照以下步骤在RAW套接字上传输数据包。

  1. 使用socket创建SOCK_RAW
  2. 定义并填充IP标头[struct ipheader]
  3. 定义并填充UDP标头[struct udphdr]
  4. 将套接字设置为不使用系统(内核)为[{1}} setsockopt()提供标题[IP_HDRINCL1]
  5. 发送缓冲区[sendto()]
  6. 您可以找到一些不错的教程(也可能是一些示例代码)here