2012-09-27 47 views
5

我有一個使用非阻塞套接字編寫的事件驅動服務器(請求響應協議 - 類似HTTP)。我通過編寫客戶端來測試部分讀取,客戶端在每隔幾秒鐘後以離散塊發送請求。 如何測試部分寫入,即我需要寫入100個字節,然後發送只有10個字節寫入的調用返回。如何強制部分寫入測試網絡服務器

我在寫基於perl的客戶端。這是通過SSL,但爲了這個問題的目的,我對TCP的部分寫入可以。

回答

0

使用TCP流控制 - 使您的客戶端從套接字非常緩慢地讀取,因此發送方(服務器)套接字發送緩衝區充滿了數據。

2

儘量減少輸出緩衝區的大小:

err = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, 1) 

這應該使送只輸出緩衝的一部分。

0

寫入大量數據非常快。

使輸出緩衝非常小(由一月的建議)

創建自己的發送功能

例如

ssize_t mysend(int sockfd, const void *buf, size_t len, int flags) 
{ 
    int shortlen = len - 100 > 0 ? len - 100; len 
    return send(sockfd, buf, shortlen, flags); 
} 

除非發送< 100字節,否則總會發送100個字節。否則,它會發送你給它的東西,如果可以的話。一旦您驗證了您的部分發送處理工作正常,將呼叫更改爲mysend回到普通發送並從您的黑客代碼中刪除mysend。