工具/软件:TI-RTOS
我的程序将打开2个 UDP 套接字: 端口#1:IP 192.168.1.16和 eth0上的端口6000以及端口#2: IP 192.168.2.33和端口6000和
然后、它将端口#1连接到多播组226.10.1.7、将端口#2连接到多播组226.10.2.7。
电路板的两个以太网接口都连接到网络交换机。 PC 也连接到交换机。
Wireshark 仅显示来自 IP 192.168.2.33的 IGMP 消息。 它显示4条消息:2条表示226.10.1.7、2条表示226.10.2.7。 它不显示来自 IP 192.168.1.16的消息。
以下是打开套接字并加入组的函数。
ERROR_CODES_T UDP:::Open (uint32_t ipaddr、uint16_t port) { 套筒垫; struct sockaddr_in sockAddress; int sockOption; //创建套接字。 sock = NDK_socket (AF_iNet、SOCK_DGRAM、IPPROTO_UDP); 如果(sock == invalid_socket) { 返回 EC_FAIL; } //将端口绑定到套接字 bzero (等位地址、sizeof (struct sockaddr_in)); sockAddress.Sin_Family = AF_iNet; sockAddress.Sin_port =端口; sockAddress.sin addr.s_addr = ipaddr; if (socket_error =NDK_bind (sock、(struct sockaddr *)&sockAddress、sizeof (struct sockaddr_in))) { 返回 EC_FAIL; } //设置广播包的套接字选项。 sockOption = true; if (socket_error =NDK_setsockopt (sock、SOL_socket、SO_broadcast、(void *)等式选项、sizeof (int)))) { 返回 EC_FAIL; } //设置输出的缓冲区大小。 sockOption = 8192; if (socket_error =NDK_setsockopt (sock、SOL_socket、SO_SNDBUF、等式选项、sizeof (int)))) { 返回 EC_FAIL; } //设置输入的缓冲区大小。 sockOption = 8192; if (socket_error =NDK_setsockopt (sock、SOL_socket、SO_RCVBUF、等式选项、sizeof (int)))) { 返回 EC_FAIL; } //成功。 socketPtr = sock; 状态=已打开; 返回 EC_SUCCESS; }//打开
ERROR_CODES_T UDP:::Join (uint32_t multIpAddr) { struct ip_mreq mreq; //为多播地址套接字选项创建结构。 bzero (&mreq、sizeof (struct ip_mreq)); mreq.IMR_multiaddr.s_addr = multIpAddr; mreq.IMR_interface.s_addr = LocalIpAddr (); //加入组。 if (socket_error =NDK_setsockopt (socketPtr、IPPROTO_IP、IP_Add_Membership、&mreq、sizeof (struct ip_mreq)))) { 返回 EC_FAIL; } 返回 EC_SUCCESS; }//加入
您看到代码有什么问题吗?
您以前是否见过这种行为?
你有什么线索吗?
已安装的组件:
CCS 7.2
GCC ARM 编译器4.9.3
PROCESSOR_SDK_RTOS_AM437X 4.00.04
AM437x PDK v1.0.7
BIOS 6.46.05.55
xdctools 3.32.02.25_core
电路板:AM437X 入门套件
此致、
Marcio。