socketFd_ = socket(AF_INET, SOCK_RAW, protoType);
sentBytes = sendto(socketFd_, buf, len, 0,
(struct sockaddr *)&sa,sizeof(structsockaddr_in));
protoType = GRE
我正在網絡中發送1000個數據包。 如果我的tx數據包速率是40,我能夠看到wireshark中的所有數據包。 但是,當我嘗試以100的速率發送某些數據包(3-4)時,無法在網絡中發送,但sendto不會返回任何錯誤。 我知道sendto只會將txpacket放入隊列中,並不保證在網絡中傳送數據包,但是從哪裏可以獲得丟棄數據包的統計信息以及數據包在內核中的丟棄原因。 我曾嘗試將接口的txqueuelen增加到65000,但它沒有幫助。 我該如何調試這個問題?rawsocket sendto()某些數據包被丟棄並且在網絡中看不到
我試圖檢查發送緩衝區的大小: getsockopt(socketFd_,SOL_SOCKET,SO_SNDBUF,&sendBuffSize,&buffLen); 它顯示了一個很大的值sendBuffSize = 124928, 我觀察到系統調用sendto()達到2040後我的掛起緩衝區大小,它會丟棄數據包(sendto在這裏成功返回),我正在檢查未完成的sendto緩衝區大小使用 ioctl(socketFd_,SIOCOUTQ,&outstandingBytes); 我的問題是爲什麼sendto沒有返回任何錯誤?是因爲sendBuffSize大於outstandingBytes? 任何人都可以幫助我調試這個問題? 謝謝 – devesh
sendto之後的另一個測試場景如果在再次調用sendto之前我會等待outstatndingBytes達到零,系統中不會有任何數據包丟失 – devesh