2012-12-11 33 views
1

我想知道當傳遞到send()的大小增長時,TCP/IP連接會發生什麼。在TCP連接中,send的長度是否與recv的長度相匹配?

在一個簡單的TCP/IP連接(默認屬性,沒有錯誤,TCP/IP沒有修復),是否保證在send()傳遞的大小將在recv()大小,可能達到一定的限制?如果是,可以確定這個限制嗎?

回答

2

每個send()發送的數據的大小可能與每個recv()不匹配,因爲接收者不知道消息的大小。例如:100個字節的消息可以以10個塊或100個字節的單個發送來發送。

至於您的問題的第二部分,所述最大發送緩衝區大小能夠通過簡單的呼叫來確定:

INT sockbufsize = 0; size = sizeof(int); getsockopt(skt,SOL_SOCKET,SO_SNDBUF,(char *)& sockbufsize,& size); // skt是套接字描述符

+0

根據您使用的API,send()可能甚至不會傳輸您要求的所有字節,如果您使用的API允許send()傳輸的字節數少於請求的字節數,它通常會返回字節數確實成功傳輸。 – grieve

2

不,這是不能保證的。 TCP是一個流協議,它的套接字接口只保證字節流將以正確的順序傳輸,沒有錯誤,僅此而已。當然,由於它保證所有數據的正確發送,所發送的總字節數將是接收到的字節總量。