У меня есть старая программа из класса, которая была 1 клиентской, 1 серверной супер-основной программой чата в c, код ниже. Я пытаюсь скомпилировать его сейчас для angstrom (работает на чипе ARM), и я получаю эти ошибки. Я установил цепочку инструментов angstrom, мне нужны специальные версии sys/socket.h (или другой заголовок, забыли, в каком заголовке находятся функции чтения/записи/закрытия) и т. Д., Которые сделаны для руки?Arm Разработка программы клиентского сервера
Ошибка:
~/Desktop/test $ arm-angstrom-linux-gnueabi-g++ main.c -o main -lnsl
main.c: In function 'int main()':
main.c:66: error: invalid conversion from 'int*' to 'socklen_t*'
main.c:66: error: initializing argument 3 of 'int accept(int, sockaddr*, socklen_t*)'
main.c:75: error: 'read' was not declared in this scope
main.c:77: error: 'write' was not declared in this scope
main.c:79: error: 'close' was not declared in this scope
main.c:81: error: 'unlink' was not declared in this scope
Я непосредственно скопировал код из класса, так что первая ошибка может быть просто что-то глупо, но последняя пара говорит, что они не могут даже найти много функций, мне нужно ... но потом каким-то образом он распознает команду accept и говорит мне, что я использую неправильные аргументы:/Любые идеи?
Код:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h> /* define socket */
#include <netinet/in.h> /* define internet socket */
#include <netdb.h> /* define internet socket */
#define SERVER_PORT 9999 /* define a server port number */
int main()
{
int sd, ns, k;
struct sockaddr_in server_addr = { AF_INET, htons(SERVER_PORT) };
struct sockaddr_in client_addr = { AF_INET };
int client_len = sizeof(client_addr);
char buf[512], *host;
/* create a stream socket */
if((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("server: socket failed");
exit(1);
}
/* bind the socket to an internet port */
if(bind(sd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1)
{
perror("server: bind failed");
exit(1);
}
/* listen for clients */
if(listen(sd, 1) == -1)
{
perror("server: listen failed");
exit(1);
}
printf("SERVER is listening for clients to establish a connection\n");
if((ns = accept(sd, (struct sockaddr*)&client_addr,
&client_len)) == -1)
{
perror("server: accept failed");
exit(1);
}
printf("accept() successful.. a client has connected! waiting for a message\n");
/* data transfer on connected socket ns */
while((k = read(ns, buf, sizeof(buf))) != 0)
{ printf("SERVER RECEIVED: %s\n", buf);
write(ns, buf, k);
}
close(ns);
close(sd);
unlink(server_addr.sin_addr);
return(0);
}