ちょっとした疑問です。
UNIXのSOCKETプログラミングでsend関数の使い方について質問です。
関数の宣言は
int send( int socket, const void *msg, unsigned int msgLength, int flag );
第3引数の msgLength は 第2引数 msg の文字列長を指定するという意味だと記憶しているのですが、
仮に、
char msg[1024] = "hoge";
の場合、msgLengthは
sizeof(msg)にすべきなのか
strlen(msg)にすべきなのか
戸惑いました。
どちらがベストなのでしょうか。
それとも通信相手サイドのプログラム次第なのでしょうか。
あるいはsendの戻り値を把握して適切に処理したほうがいいのでしょうか。
それともうひとつ。
第4引数はとりあえず 0 を指定していますが、これについて詳しく書かれているサイトなど教えていただけると幸いです。
UNIXでsocketプログラムのsend関数について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: UNIXでsocketプログラムのsend関数について
ちょっとした疑問というより、ちゃんと調べた方が良い疑問ですね。
第4引数にも意味があります。
「Man page of SEND」
http://linuxjm.sourceforge.jp/html/LDP_ ... end.2.html
Linux/Unixならmanで調べるとか上記サイトで調べるのは基本といって良いので調べるようにしましょう。
第3引数は、文字列の長さというよりデータ長です。strlen(msg)で送った場合は文字列終端が含まれないので困るんじゃなかいと思いますよ。
第4引数にも意味があります。
「Man page of SEND」
http://linuxjm.sourceforge.jp/html/LDP_ ... end.2.html
Linux/Unixならmanで調べるとか上記サイトで調べるのは基本といって良いので調べるようにしましょう。
第3引数は、文字列の長さというよりデータ長です。strlen(msg)で送った場合は文字列終端が含まれないので困るんじゃなかいと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
sendMessageUser
Re: UNIXでsocketプログラムのsend関数について
そうですね。
Linux/Unixならmanで調べられるのを忘れていました。
本件だと通信相手がJavaでreadLineで受信していたため、strlenでも送信側の末尾に\n\0があれば大丈夫という事がわかりました。
(sizeofだと\0以降のゴミも送ってしまうため、受信サイズを通信双方で約束していないといけないですよね)
第4引数についてはまた勉強します。
Linux/Unixならmanで調べられるのを忘れていました。
本件だと通信相手がJavaでreadLineで受信していたため、strlenでも送信側の末尾に\n\0があれば大丈夫という事がわかりました。
(sizeofだと\0以降のゴミも送ってしまうため、受信サイズを通信双方で約束していないといけないですよね)
第4引数についてはまた勉強します。