Я знаю, что есть несколько похожих вопросов о SO, но я чувствую, что у всех есть другая проблема, которая вызывает это. Поэтому я отправляю свой конкретный случай.Недопустимый аргумент sendto в ansi C при попытке реализовать UDP
Я работаю над малиной pi, используя raspbian, производную debian. Я кодирования в ANSI C. Это сервер, который посылает некоторые данные в UdP клиента на другом конце через порт 500.
#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, неверен, это не сработает при компиляции. Но тип правильный, и это компилируется, только во время выполнения он терпит неудачу.
Это не связано с типом аргументов. Например, 'sockfd' может быть любым целым числом, даже если это целое число не относится к сокету. Таким образом, ваш код будет скомпилирован, но вы получите ошибку во время выполнения. –