我有一個使用非阻塞套接字編寫的事件驅動服務器(請求響應協議 - 類似HTTP)。我通過編寫客戶端來測試部分讀取,客戶端在每隔幾秒鐘後以離散塊發送請求。 如何測試部分寫入,即我需要寫入100個字節,然後發送只有10個字節寫入的調用返回。如何強制部分寫入測試網絡服務器
我在寫基於perl的客戶端。這是通過SSL,但爲了這個問題的目的,我對TCP的部分寫入可以。
我有一個使用非阻塞套接字編寫的事件驅動服務器(請求響應協議 - 類似HTTP)。我通過編寫客戶端來測試部分讀取,客戶端在每隔幾秒鐘後以離散塊發送請求。 如何測試部分寫入,即我需要寫入100個字節,然後發送只有10個字節寫入的調用返回。如何強制部分寫入測試網絡服務器
我在寫基於perl的客戶端。這是通過SSL,但爲了這個問題的目的,我對TCP的部分寫入可以。
使用TCP流控制 - 使您的客戶端從套接字非常緩慢地讀取,因此發送方(服務器)套接字發送緩衝區充滿了數據。
儘量減少輸出緩衝區的大小:
err = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, 1)
這應該使送只輸出緩衝的一部分。
寫入大量數據非常快。
使輸出緩衝非常小(由一月的建議)
或
創建自己的發送功能
例如
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。