【发布时间】:2015-01-09 21:27:02
【问题描述】:
我正在尝试实现我自己的传输层协议,但我很高兴让网络层保持原样,并且不需要弄乱实际的 IP 标头信息。
当然,当在原始套接字上调用 recvfrom() 时,会得到原始 IP 数据报,而 sockaddr 结构体没有填写。
有没有办法让堆栈填充这些结构并将 ip 标头留在数据部分之外,还是需要手动实现?
接收者:
struct sockaddr_in sender;
int sender_len;
raw_socket = socket(AF_INET, SOCK_RAW, 56);
...
if((n = recvfrom(raw_socket, buf, 1024, 0, (struct sockaddr*)&sender, &sender_len)) == -1){
perror("recvfrom");
return -1;
}
【问题讨论】:
-
已更新以显示接收方代码。
-
好吧,看来那是不可避免的了。不过感谢您的帮助。
-
可以使用数据报而不是原始套接字,然后只能看到 buf 数组中的数据。
标签: c linux sockets raw-sockets