Hallo Liste!
Ich habe folgendes Code-Beispiel (Buch: C und Linux) für einen einfachen
"Universal-Client" (Arbeitsweise ähnlich Terminal-Programm) für C unter
Linux gefunden:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
static char buffer[256];
int sock_fd, err, length, port;
struct sockaddr_in server_addr;
fd_set input_fdset;
if (argc != 3)
{
fprintf(stderr, "Usage: connect ip-addr
port\n");
return(1);
}
if (sscanf(argv[2], "%d", &port) != 1)
{
fprintf(stderr, "connect: bad argument
'%s'\n", argv[2]);
return(1);
}
sock_fd = socket(PF_INET, SOCK_STREAM, 0);
if (sock_fd == -1)
{
perror("connect: Can't create new socket");
return(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
err = inet_aton(argv[1], &(server_addr.sin_addr));
if (err == 0)
{
fprintf(stderr, "connect: Bad IP-Address
'%s'\n", argv[1]);
return(1);
}
err = connect(sock_fd, &server_addr, sizeof(struct
sockaddr_in));
if (err == -1)
{
perror("connect: connect() failed");
return(1);
}
while (1)
{
FD_ZERO(&input_fdset);
FD_SET(STDIN_FILENO, &input_fdset);
if (select(sock_fd+1, &input_fdset, NULL,
NULL, NULL) == -1)
perror("connect: select() failed");
if (FD_ISSET(STDIN_FILENO, &input_fdset))
{
if (fgets(buffer, 256,
stdin) == NULL)
{
printf("connect: Closing socket.\n");
break;
}
length = strlen(buffer);
send(sock_fd, buffer,
length, 0);
}
else
{
length = recv(sock_fd, buffer, 256,
0);
if (length == 0)
{
printf("Connection
closed by remote host.\n");
break;
}
write(STDOUT_FILENO, buffer,
length);
}
}
close(sock_fd);
return(0);
}
Wenn ich den Code kompiliere und linke (SUSE 10.0 wie auch Knoppix 5.1.1),
erscheint folgende Warnung:
./client.c:44: Warnung: Übergabe des Arguments 2 von "connect" von
inkompatiblem Zeigertyp
bzw. etwas im Sinne von
passing argument 2 [...] incompatible pointer type
Beim Start des Progs erscheint keinerlei Fehlermeldung. Sowohl socket() als
auch connect() scheinen zu funktionieren. Allerdings kommt keine Ausgabe der
Verbindungsbestätigung. Im Buch wird beispielhaft eine Verbindung zu einem
FTP-Server aufgebaut. Dort erscheint dann
220 toshi.at-home FTP server [...]
Es können Eingaben getätigt werden, die Antworten des Servers werden
ausgegeben. So leider nicht bei mir...
Was habe ich übersehen?
Besten Dank vorab & Grüße,
Kai