UNIXでsocketプログラムのsend関数について

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

UNIXでsocketプログラムのsend関数について

#1

投稿記事 by sendMessageUser » 13年前

ちょっとした疑問です。
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 を指定していますが、これについて詳しく書かれているサイトなど教えていただけると幸いです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: UNIXでsocketプログラムのsend関数について

#2

投稿記事 by softya(ソフト屋) » 13年前

ちょっとした疑問というより、ちゃんと調べた方が良い疑問ですね。
第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関数について

#3

投稿記事 by sendMessageUser » 13年前

そうですね。
Linux/Unixならmanで調べられるのを忘れていました。

本件だと通信相手がJavaでreadLineで受信していたため、strlenでも送信側の末尾に\n\0があれば大丈夫という事がわかりました。
(sizeofだと\0以降のゴミも送ってしまうため、受信サイズを通信双方で約束していないといけないですよね)

第4引数についてはまた勉強します。

閉鎖

“C言語何でも質問掲示板” へ戻る