返信

先生のご指摘通りでした。。。
プログラムにsleep(20)を入れながらどこでRSTパケットを出力しているか探しました。
2つの条件が重なった時に発生しました。条件は、最初のコネクションの通信が終わりPCから FINパケットを出力するした後、PCから次のコネクションが始まった状態の時にソケットをクローズするとRTSパケットがLinux組込機から出力されました。

    PC         Linux組込(port 9000)
 (port 1132)----- SYN  ---> 
     <-3ステートハンドシェーク ->
     <---  データ通信 ---> 
  
     --- FIN/ACK ------> 
 
(port 1133)--- SYN       --->(9000)    
      <- 3ステートハンドシェーク ->
      <---  データ通信 --->
通信途中に ひとつ前のパケットが交る 
(port 1132) < --- FIN ACK ---  (9000)
         ---- ACK   --->
                           ソケットクローズ   
  port 1133 <--- RST・ACK ---       <---+

現状の処理は以下の繰り返しでした。
socket()-->bind()-->Listen()-->accept()-->read()/send()-->close(accept)-->close(sokect) 
組込機側の処理として 
  syn--> read()-->send() -->Fin の時は問題はありませんでした。しかし、2つのコマンド(別のポート)がPCから連続して送られてくると最初のパケットの処理が終了する前にTCPソケットは2つ目のパケットの処理を初めていました。その状態でアプリケーションが最初のパケット通信のソケットをクローズするとTCPソケットがRSTパケットを送信していました。

以上 先生の的確なアドバイス大変助かりました。ありがとうございます。

 今日も「基礎からわかるネットワーク入門」のFTPの仕組みに助けられました。

<code>Only

  • 使用できるHTMLタグ: <code>
  • 文字で図を描く場合に<code>と</code>で囲んでください
画像認証
機械的なスパムメッセージ送信を防止するために画像認証を設けています。ご協力ください。
Image CAPTCHA
Enter the characters shown in the image.