質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

6369閲覧

c言語のsocketプログラミングについて

tamago0224

総合スコア71

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/02/21 06:48

以下のサイトを見ながらコードを書いたのですが、コンパイルすると
sock = accept(sock0, (struct sockaddr *)&clinet, &len);
の行で警告が出ます。その警告文を以下にのせます。

socket_sample1.c:28:51: warning: passing 'int *' to parameter of type
'socklen_t *' (aka 'unsigned int *') converts between pointers to integer
types with different sign [-Wpointer-sign]
sock = accept(sock0, (struct sockaddr *)&client, &len);
^~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/S
DKs/MacOSX10.11.sdk/usr/include/sys/socket.h:580:69: note:
passing argument to parameter here
int accept(int, struct sockaddr * __restrict, socklen_t * __restrict)
^
1 warning generated.

どうやらaccept関数の第3引数の型が違うということらいしいです。
ですが、他のサイトのaccept関数の使い方を見てみると今回のせたコードと同じ使用法だったので質問させてもらいました。

c

1#include<stdio.h> 2#include<sys/types.h> 3#include<sys/socket.h> 4#include<netinet/in.h> 5#include<unistd.h> 6 7int main() { 8 int sock0; 9 struct sockaddr_in addr; 10 struct sockaddr_in client; 11 int len; 12 int sock; 13 14 /*ソケットの作成*/ 15 sock0 = socket(AF_INET, SOCK_STREAM, 0); 16 17 /*ソケットの設定*/ 18 addr.sin_family = AF_INET; 19 addr.sin_port = htons(12345); 20 addr.sin_addr.s_addr = INADDR_ANY; 21 bind(sock0, (struct sockaddr*)&addr, sizeof(addr)); 22 23 /*TCPクライアントからの接続要求を待てる状態にする*/ 24 listen(sock0, 5); 25 26 /*TCPクライアントからの接続要求を受け付ける*/ 27 let = sizeof(client); 28 sock = accept(sock0, (struct sockaddr *)&client, &len); 29 30 //文字列の送信 31 write(sock, "HELLO", 5); 32 33 /*TCPセッションの終了*/ 34 close(sock); 35 36 /*listenするsocketの終了*/ 37 close(sock0); 38 39 return 0; 40} 41

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

accept関数の第3パラメータはsocklen_t *ですが、ご質問のソースではint *を渡していますね。lenintではなくsocklen_tで定義すべきです。

投稿2016/02/21 07:31

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamago0224

2016/02/21 07:45

盲点でした。 我ながら情けない。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問