linux - UDP 服务器进程无法接受来自内核的数据包

标签 linux networking network-programming fedora

我有一个非常简单的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

这有潜在的原因吗? 谢谢!

最佳答案

代码乍一看还不错。

最明显的解释可能只是 Fedora 18 机器安装了默认配置的 iptables 防火墙...

尝试运行 lsmod 来查找加载的 iptables 模块,和/或运行 iptables -L 来列出当前的规则集。

关于linux - UDP 服务器进程无法接受来自内核的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15973047/

相关文章:

linux - 获取星期一和星期日等一周的任何日期作为 Unix 中的参数

networking - 端口转发和 Python 套接字

networking - 无法使用内置 ssh 客户端从 macOS 通过 22 以外的任何端口 ssh 到远程主机

java - 如何根据IP地址获取主机名?

c++ - C++ 模块之间的数据传输

linux - Spring Boot 应用程序即服务

linux - 用环境变量替换curl请求中的变量

linux - zsh 参数扩展语法 : combining default value and conversion to upper case

java - 如何在Java中分别绑定(bind)IPv6和IPv4

linux - 同时等待 epoll 和 io_uring