自作関数でreturnにSOCKADDR_INの型を使いたい
Posted: 2012年7月14日(土) 22:00
先日お世話になった 8492飛行隊 です。
udp通信でデータを受信して"SOCKADDR_INの型もの"を返す関数を作っています。
この"SOCKADDR_INの型もの"をsentoの第四引数にそのまま代入して
送信元に送信データをそのまま返信するプログラムを作りたいです。
そのためには自作関数を作らなければいけません。
しかし返り値に"SOCKADDR_INの型もの"をいれると
'SOCKADDR_IN' から 'int' に変換できません。
と出てきました。
キャストもできませんでした。
説明が下手ですみません。
よろしくお願いします。
問題の関数
udp通信でデータを受信して"SOCKADDR_INの型もの"を返す関数を作っています。
この"SOCKADDR_INの型もの"をsentoの第四引数にそのまま代入して
送信元に送信データをそのまま返信するプログラムを作りたいです。
そのためには自作関数を作らなければいけません。
しかし返り値に"SOCKADDR_INの型もの"をいれると
'SOCKADDR_IN' から 'int' に変換できません。
と出てきました。
キャストもできませんでした。
説明が下手ですみません。
よろしくお願いします。
問題の関数
int UDPServer(unsigned short PortNo)
{
SOCKET s = socket(AF_INET,SOCK_DGRAM,0);
if(s<0)//ソケットエラー
{
return -1;
}
SOCKADDR_IN sockaddrin;
memset(&sockaddrin,0,sizeof(sockaddrin));
sockaddrin.sin_family = AF_INET;
sockaddrin.sin_port = htons(PortNo);
if(SOCKET_ERROR==bind(s,(LPSOCKADDR)&sockaddrin,(int)sizeof(sockaddrin)))
{
closesocket(s);
return -2;//bindエラー
}
char buff[1024];
SOCKADDR_IN from;
int fromlen=(int)sizeof(from);
while(1)//受信の無限ループになっています。
{
int re=recvfrom(s,buff,(int)sizeof(buff)-1,0,(SOCKADDR*)&from,&fromlen);//受信するまでここで停止
if(re!=SOCKET_ERROR)//エラーで無ければ表示
{
buff[re]='\0';
printf(buff);
}
}
closesocket(s);
return from;
}