合計 昨日 今日

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

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: Yukosoft
[URL]
ぴよぴよ(98 ポイント)
Date: 2017年5月14日(日) 12:40
No: 1
(OFFLINE)

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

サーバ・クライアント通信で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として自動的に送信される

Name: みけCAT
[URL]
伝説なるハッカー(664,603 ポイント)
Date: 2017年5月14日(日) 19:53
No: 2
(OFFLINE)

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

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

Yukosoft さんが書きました: recv(s , recvbuff , 256 , 0);

←※※※ここで受信結果が正しければackのみ送付したい※※※

パケットキャプチャなどで、現状では「受信結果が正しければackのみ送付」されていないことは確認しましたか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Name: YuO
[URL]
ハッカー(151,283 ポイント)
Date: 2017年5月15日(月) 00:20
No: 3
(OFFLINE)

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

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[19人]