UDP使用套接字重新调用,导致产生NULL数据包

我正在实现UDPvideoredirectfunction。 理想情况下,传入的video数据包应该被处理并redirect到指定的输出接口(eth0或eth1)。 这是如何实现的:

  1. 用户从一个webui中select接口。 接口传递给后端

  2. 使用OpenCaster套件( 这里 )处理video数据包..以下库用于处理数据包:tsfixcc,tsdiscont,tsvbr2cbr,tstimedwrite,tspcrrestamp和tsudpsend。

  3. 我修改tsudpsend如下,以支持绑定套接字到一个特定的接口,没有编译错误,我认为它工作正常。

int main (int argc, char *argv[]) { char *opt; opt = argv[5]; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd < 0) { perror("socket(): error "); return 0; } struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); strcpy(ifr.ifr_name, opt); if (ioctl(sockfd, SIOCGIFINDEX, &ifr)<0){ fprintf(stderr,"ioctl(): error "); } if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, opt, strlen(opt))>0){ fprintf(stderr,"setsock(): error "); } fprintf(stderr, "The bind is done on interface %s \n", opt); fprintf(stderr, "opt length is %zu \n", strlen(opt)); if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) { fprintf(stderr,"Server-setsockopt() error for SO_BINDTODEVICE"); close(sockfd); return 1; } return 0; } 

问题是:当我在选定的接口(eth0或eth1)上进行数据包捕获时,处理的数据包是NULL数据包而不是video数据包,如下

 1054354 1127.215289 192.168.78.196 -> 239.1.1.1 MPEG TS 1358 NULL packet 1054355 1127.216366 192.168.78.196 -> 239.1.1.1 MPEG TS 1358 NULL packet 1054356 1127.217405 192.168.78.196 -> 239.1.1.1 MPEG TS 1358 NULL packet 1054357 1127.218462 192.168.78.196 -> 239.1.1.1 MPEG TS 1358 NULL packet 1054358 1127.219549 192.168.78.196 -> 239.1.1.1 MPEG TS 1358 NULL packet 

任何build议或意见,为什么发生这种情况? 有什么build议吗?