我有一个非常简单的 UDP 服务器程序
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char**argv)
{
int sockfd,n;
struct sockaddr_in servaddr,cliaddr;
socklen_t len;
char mesg[1000];
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(54000);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
for (;;)
{
len = sizeof(cliaddr);
n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len);
sendto(sockfd,mesg,n,0,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
printf("-------------------------------------------------------\n");
mesg[n] = 0;
printf("Received the following:\n");
printf("%s",mesg);
printf("-------------------------------------------------------\n");
}
}
我把它放在几台机器上,让一个 udp 客户端向它发送数据包,它可以成功接受传入的 udp 数据包
然后我把它放在一台带有fedora 18的机器上我编译程序并运行它然后我让一个udp客户端向它发送数据包(与其他机器上相同)但程序不能接受我使用的传入UDP数据包tcpdump 用于捕获,我可以看到传入的 udp 数据包为什么服务器程序不接受这台机器上的传入 UDP 数据包?
我检查了 iptables 规则iptables -L
,结果在
https://docs.google.com/file/d/0B09y_TWqTtwlNHp1eTJkTFNuY0k/edit?usp=sharing
这有潜在的原因吗?谢谢!