2011-09-30 26 views
4

我在循環中使用recv函數接收網絡數據,但我們假設我想停止接收數據中間循環。我可以打破這個循環,但這似乎不是一種非常乾淨的方式來停止接收數據。我應該如何幹淨地擺脫recv循環?

那麼有什麼辦法可以乾淨地停止接收數據,或者只是打破循環好嗎?這是HTTP GET/POST請求。

這裏的simplifed我使用:

do { 
    nDataLen = recv(mySocket, data, BUFFSIZE, 0); 
    if (nDataLen > 0) 
    { 
    /* Process Data */ 
    // I'd like to break out of the loop 
    // if something is found when processing the data 
    // But, I want to do this cleanly. 
    } 
} while (nDataLen != 0); 
+0

我們可以看到您使用的代碼嗎? –

+0

「停止接收數據」是什麼意思? recv允許您從已收到的網絡緩衝區中提取數據,或等待收到一些數據。如果你沒有調用recv,那並不意味着數據沒有被接收到。它仍然會進入系統緩衝區。 –

+0

@VaughnCato它會傷害任何東西,只是打破循環?如果數據在某個系統緩衝區中,它會在那裏停留多久? – Josh

回答

3

打破recv循環將不會關閉連接。所發生的只是你停止調用recv,因此停止從套接字讀取數據。來自同行的數據仍然會到達您的套接字。如果您想幹淨地關閉,請在套接字文件描述符上調用close

0

突圍循環是結束調用recv的方式。另一種方法是包含一個布爾值should_stop並在循環條件中檢查它。但是,您應該收到插槽中剩下的任何內容並將其正確關閉。

0

如果您不需要套接字關閉套接字並跳出循環。