onvif 服務端設備發現在linux上運行不會報錯,但是交叉編譯運行在嵌入式開發板上是會報錯

{
 int loop = 1;
 struct ip_mreq mcast;

 /* 在同一個主機上進行廣播設置套接口,
 作用是方便單個開發系統上測試多播IP廣播 */ 
  loop = 1; 
 if ((setsockopt(pstSoapEnv->master, SOL_SOCKET, SO_REUSEADDR, (void *) &loop,  sizeof (loop))) == -1)
 {  
  printf("setsockopt SO_REUSEADDR error!\n");  
 }
 
 if(setsockopt(pstSoapEnv->master, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&loop, sizeof(loop)) < 0)
 {    
  perror("setsockopt IP_MULTICAST_LOOP error!\n");
  return (-1);
 }

 mcast.imr_multiaddr.s_addr = inet_addr("239.255.255.250");
 mcast.imr_interface.s_addr = htonl(INADDR_ANY);
#if 1
 if(setsockopt(pstSoapEnv->master, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mcast, sizeof(mcast)) < 0)
 {
  printf("setsockopt IP_ADD_MEMBERSHIP error!\n");////交叉編譯運行在嵌入式開發板上是會報錯,會運行到這裏
  return -1;
 }
#endif
 return 0;
}

 

 

 

setsockopt(pstSoapEnv-&gt;master, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&amp;mcast, sizeof(mcast)) 
出現這樣子的問題可能是開發板的網關出現了問題,設置下網關,我得問題得到了解決(我只能說是我的問題解決了,如果你碰到了這種情況,我不能保證和我的情況是一樣的,僅供參考)。

以下附設置網關命令
route add default gw 192.168.0.1

發佈了50 篇原創文章 · 獲贊 23 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章