【发布时间】:2019-04-04 13:54:29
【问题描述】:
我尝试使用原始套接字编写一些代码,同时观察到一些奇怪的现象。考虑代码:
int rsfd = socket(AF_INET,SOCK_RAW,253);
if(rsfd<0)
{
perror("Raw socket not created");
}
else
{
struct sockaddr_in addr2;
memset(&addr2,0,sizeof(addr2));
addr2.sin_family = AF_INET;
addr2.sin_addr.s_addr = inet_addr("127.0.0.2");
/* if(connect(rsfd,(struct sockaddr*)&addr2,sizeof(addr2))<0)
{
perror("Could not connect");continue;
} */
}
现在,如果我删除注释部分,我通过此 rsfd 发送的任何消息也会被自己接收。在另一端,我已经绑定了一个 IP 地址为127.0.0.2 的套接字。当我打印发送方套接字的 IP 地址时,它正在打印127.0.0.1,但它仍在接收用于127.0.0.2 的数据包。当我添加评论部分中提到的连接请求时,这个问题得到了解决。这看起来很奇怪,因为另一方面,没有人接受或监听这个地址,而且,我正在使用 sendto 和 recvfrom 函数来发送和接收用于连接较少套接字的数据包。我的问题是,为什么会这样?这个连接请求如何解决这里的问题?
【问题讨论】:
标签: c sockets networking raw-sockets