SO に同様の質問がいくつかあることは知っていますが、これを引き起こしている別の問題を誰もが抱えているように感じます。だから私は私の特定のケースを投稿しています。
私は、debian の派生物である raspbian を使用して、raspberry pi に取り組んでいます。ansi C でコーディングしています。これは、ポート 500 を介して別の端の udp クライアントにデータを送信するサーバーです。
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
int main()
{
int sockfd;
struct sockaddr_in servaddr,cliaddr;
socklen_t clilen;
char buffer[256];
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(500);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
sprintf(buffer,"hi this is a test \n");
if(sendto(sockfd,buffer,sizeof(buffer),0,(struct sockaddr *)&cliaddr,sizeof(cliaddr))==-1)
{ error("fail:")
};
return 0;
}
しかし、これは「無効な引数」というエラーを表示するだけで、何が間違っているのかわかりません。sendto に指定する引数の型が正しくない場合、これはコンパイルに失敗します。しかし、型は正しく、これはコンパイルされますが、実行時にのみ失敗します。