send関数でのackのみ送信方法についてご教授ください

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: send関数でのackのみ送信方法についてご教授ください

Re: send関数でのackのみ送信方法についてご教授ください

#3

by YuO » 7年前

どこの層の話をしているのでしょうか。
  • TCP層(やそれ以下の層)でのACKの話をしているのであれば,自前でTCP(やそれ以下の層)のドライバーを作っている場合を除いて,上位層はTCP(やそれ以下の層)がACKを返したとか知る必要が無いですし,それに依存するプロトコルを作ってはいけません。
  • アプリケーション層の話であれば,普通にsendを使ってACKを送ればよいでしょう。ACKだけを送る方法が無いのであれば,プロトコルの不備になります。ただし,Nagleアルゴリズム等によって,1 octetだけ等の小さな情報の送信は送信自体が遅延される可能性があります。

Re: send関数でのackのみ送信方法についてご教授ください

#2

by みけCAT » 7年前

「本来TCPで安定して送受信できるストリームの内容だけを見て処理をすればいいはずのアプリケーションが、ackを送信するタイミングをコントロールしたい」というのは不自然な状況であり、
The XY Problemの疑いがあります。
なぜ「クライアントからsendの途中で意図してackのみ送信する」ことをしたいのですか?
Yukosoft さんが書きました: recv(s , recvbuff , 256 , 0);

←※※※ここで受信結果が正しければackのみ送付したい※※※
パケットキャプチャなどで、現状では「受信結果が正しければackのみ送付」されていないことは確認しましたか?

send関数でのackのみ送信方法についてご教授ください

#1

by Yukosoft » 7年前

サーバ・クライアント通信でWindowsのTCP接続ツールを作っておりますが、
ソケット宣言→サーバコネクト→sendやrecv→close
に関するサンプルは多々あるのですが、クライアントからsendの途中で意図して
ackのみ送信するような方法について探しきれませんでした。

方法があるかご教授いただければ幸いです。

クライアント側

s = socket(AF_INET, SOCK_STREAM , 0);

(connect(s, (struct sockaddr *) &dest, sizeof(dest)));
←サーバにはsyn/ackとして自動的に送信される

while(1){

send(s, buffer, length , 0);
←送付するデータをつければサーバにはpsh/ackとして自動的に送信される

又は

recv(s , recvbuff , 256 , 0);

←※※※ここで受信結果が正しければackのみ送付したい※※※
この方法は存在しますか?
}

closesocket(s);
←サーバにはFINとして自動的に送信される

ページトップ