我有一个非常简单的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
有潜在的原因吗? 谢谢!
答案 0 :(得分:1)
乍一看,代码看起来还不错。
最明显的解释可能只是Fedora 18计算机安装了默认配置的iptables
防火墙......
尝试运行lsmod
查找已加载的iptables
模块,和/或iptables -L
列出当前规则集。