渡されるサイズがsend()
大きくなると、TCP/IP接続で何が起こるのだろうかと思います。
単純なTCP/IP接続(デフォルトの属性、TCP / IPが修正しなかったエラーはありません)では、渡されるsend()
サイズがrecv()
、おそらくある程度の制限までのサイズになることが保証されていますか?はいの場合、この制限を決定できますか?
渡されるサイズがsend()
大きくなると、TCP/IP接続で何が起こるのだろうかと思います。
単純なTCP/IP接続(デフォルトの属性、TCP / IPが修正しなかったエラーはありません)では、渡されるsend()
サイズがrecv()
、おそらくある程度の制限までのサイズになることが保証されていますか?はいの場合、この制限を決定できますか?
受信者はメッセージのサイズを知らないため、各send()によって送信されるデータのサイズは各recv()と一致しない場合があります。例:100バイトのメッセージは、10チャンクで送信することも、100バイトのシングルショットで送信することもできます。
質問の2番目の部分に関しては、最大送信バッファサイズは次の簡単な呼び出しで決定できます。
int sockbufsize = 0; size = sizeof(int); getockopt(skt、SOL_SOCKET、SO_SNDBUF、(char *)&sockbufsize、&size); //sktはソケット記述子です
いいえ、それは保証されていません。TCPはストリームプロトコルであり、TCPへのソケットインターフェイスは、バイトストリームが正しい順序で送信され、エラーが発生しないことを保証するだけです。もちろん、すべてのデータの正しい送信を保証するため、送信されるバイトの合計量は、受信されるバイトの合計量になります。