我需要開發一個能夠接收週期性緊急超越界數據的TCP服務器。我正在使用POCO C++庫來實現這一點。在StreamSocket類的(稀缺)的文檔,我看這應該是一個很容易的任務來實現:它應該使用receiveBytes時設置SO_OOBINLINE標誌(完成)方法,像這樣:使用POCO C++通過TCP連接發送和接收OOB數據
n = ss.receiveBytes(buffer, sizeof(buffer), SO_OOBINLINE);
爲了測試這一點,我做,它使用「sendUrgent()」方法來發送所述OOB數據一個非常簡單的TCP客戶端(也用POCO庫)(一個字節):
ss1.sendUrgent(0xFF);
當我發送OOB數據,沒有任何反應。服務器似乎沒有注意到它。另一方面,當我發送「普通」數據時,使用sendBytes()方法,如果SO_OOBINLINE標誌在StreamSocket上設置,我會收到無限量的相同的發送數據(它會一直讀取相同的數據數據雖然沒有人重發它)。
我錯過了什麼?
編輯:@ JimR的建議和閱讀this後,我曾嘗試:
n = ss.receiveBytes(buffer, sizeof(buffer), MSG_OOB);
即使這樣:
n = ss.receiveBytes(buffer, sizeof(buffer), SO_OOBINLINE | MSG_OOB);
都提出同樣的異常:無效的參數。
'SO_OOBINLINE'告訴套接字在常規讀取中返回OOB數據。 –