2014-01-12 78 views
2

我想連接到服務器,並同步寫入(2)到它。忽略Linux TCP套接字上的傳入字節

在某些時候,緩衝區正在填滿,我需要閱讀(2)讓我繼續寫作。讀(2)當然會不必要地複製大量的字節,並且如果我不知道有多少字節的話,它會被阻塞。

如何丟棄TCP套接字上的傳入字節?

我試過ioctl(sockfd, I_SRDOPT, RMSGD)但是它返回errno EFAULTBad address

+0

我不知道你想完成什麼。爲什麼「不必要地複製大量字節」?你是否想使用'select(2)'來查看是否有數據需要讀取,這樣當沒有東西可讀時你不會阻塞? – DarkDust

+1

這個問題存在嚴重問題。你爲什麼要忽略服務器向你發送的響應?一方面它可能會告訴你*停止。* – EJP

+1

@EJP - 我也不明白。 –

回答

2

您可以在非阻塞模式下使用套接字定期消耗傳入數據而不會阻塞。引用一段tutorial

如果您在非阻塞模式調用recv(),它會返回任何數據,該系統具有在它的讀取緩衝該插座。但是,它不會等待這些數據。如果讀緩衝區爲空,系統將立即從recv()返回,說「操作會阻止!」。