sendは、アクセプトした相手のソケットにバイトデータを書き込むことで送信するUNIXシステムコール・・・。
前回は、相手から送られたきた文字列をサーバの標準出力に出力するだけだったが、
今回は、その文字列をsendを使って相手に送り返す・・・。
メッセージ処理のループで、
strcmpで"end"でない場合、読み込んだ文字列bufをprintfで出力した後、
bufに"\r\n"を再びつけて、sendにacc, buf, bufの長さなどを渡す・・・。
これでbufがクライアント側に送り返される・・・。
$ ./send soc = 3 setsockopt(SO_REUSEADDR) success. bind success. listen success.
サーバはアクセプト待ち・・・。
$ telnet bgstation0.com 3000 Trying 27.120.97.162... Connected to bgstation0.com. Escape character is '^]'.
telnetで接続・・・。
$ telnet bgstation0.com 3000 Trying 27.120.97.162... Connected to bgstation0.com. Escape character is '^]'. ABCDE
と"ABCDE"を入力してリターンを押すと、
$ telnet bgstation0.com 3000 Trying 27.120.97.162... Connected to bgstation0.com. Escape character is '^]'. ABCDE ABCDE
と"ABCDE"がもうひとつ出力された・・・。
これは、サーバから返されたものである・・・。
$ ./send soc = 3 setsockopt(SO_REUSEADDR) success. bind success. listen success. accept!(IPAddress = 27.120.97.162, Port = 40498) ABCDE
サーバ側では"ABCDE"を受理しているからね・・・。
$ telnet bgstation0.com 3000 Trying 27.120.97.162... Connected to bgstation0.com. Escape character is '^]'. ABCDE ABCDE end Connection closed by foreign host. $
"end"だと、向こうからは返って来ず、切断される・・・。
$ ./send soc = 3 setsockopt(SO_REUSEADDR) success. bind success. listen success. accept!(IPAddress = 27.120.97.162, Port = 40498) ABCDE $
サーバ側も終了している・・・。