2
我想連接到服務器,並同步寫入(2)到它。忽略Linux TCP套接字上的傳入字節
在某些時候,緩衝區正在填滿,我需要閱讀(2)讓我繼續寫作。讀(2)當然會不必要地複製大量的字節,並且如果我不知道有多少字節的話,它會被阻塞。
如何丟棄TCP套接字上的傳入字節?
我試過ioctl(sockfd, I_SRDOPT, RMSGD)
但是它返回errno EFAULT
Bad address
。
我想連接到服務器,並同步寫入(2)到它。忽略Linux TCP套接字上的傳入字節
在某些時候,緩衝區正在填滿,我需要閱讀(2)讓我繼續寫作。讀(2)當然會不必要地複製大量的字節,並且如果我不知道有多少字節的話,它會被阻塞。
如何丟棄TCP套接字上的傳入字節?
我試過ioctl(sockfd, I_SRDOPT, RMSGD)
但是它返回errno EFAULT
Bad address
。
您可以在非阻塞模式下使用套接字定期消耗傳入數據而不會阻塞。引用一段tutorial:
如果您在非阻塞模式調用
recv()
,它會返回任何數據,該系統具有在它的讀取緩衝該插座。但是,它不會等待這些數據。如果讀緩衝區爲空,系統將立即從recv()
返回,說「操作會阻止!」。
我不知道你想完成什麼。爲什麼「不必要地複製大量字節」?你是否想使用'select(2)'來查看是否有數據需要讀取,這樣當沒有東西可讀時你不會阻塞? – DarkDust
這個問題存在嚴重問題。你爲什麼要忽略服務器向你發送的響應?一方面它可能會告訴你*停止。* – EJP
@EJP - 我也不明白。 –