Archiv verlassen und diese Seite im Standarddesign anzeigen : connect: Socket operation on non-socket
HI!
ich bekomme die oben stehende fehlermeldung bei dieser code zeile:
if(connect(my_socket, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1)
kennt jemand diesen fehler?
ich habe nachgeschaut... viel ist es das problem, dass etwas mit dem socket bei socket() net stimmt... zb ungültig oder so^^
na, kann mir da jemand helfen?
greEz
gEry
hat wirklich keiner hier eine idee...
Hmm also,
kann sein dass connect Asynchron arbeitet!
Wäre aber hilfreicher wenn du sagen könnntest welche Klasse das genau ist!
Bin jetzt auf folgendes gestoßen
WSAENOTSOCK
(10038)
Socket operation on non-socket.
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.
Aber wie gesagt,
sag mir bitte um welche Klasse es sich genau handelt!
Dann kann ich vielleicht etwas in erfahrung bringen!
WSA? Ist das nicht für winsock? - ich benutze nur socjet, also linux... danke für deine hilfe... auf diese definition bin ich auhc schon gestossen...
folgende includes bruache ich:
#include <sys/socket.h>
#include <sys/types.h>
wenn ich das mache:
cout << my_socket <<endl;
dannn bekomme ich den wert 0, welcher ja für fehlerfrei spricht... jedoch bei connect kommt die fehlermeldung: on non-socket -.-
WSA? Ist das nicht für winsock? - ich benutze nur socjet, also linux... danke für deine hilfe... auf diese definition bin ich auhc schon gestossen...
folgende includes bruache ich:
#include <sys/socket.h>
#include <sys/types.h>
wenn ich das mache:
cout << my_socket <<endl;
dannn bekomme ich den wert 0, welcher ja für fehlerfrei spricht... jedoch bei connect kommt die fehlermeldung: on non-socket -.-
spricht nicht für fehlerfrei. 0 sollte stdin sein, also kein socket sondern ein filedescriptor für die ausgabe auf die shell.
zeig mal deinen socket() aufruf.
hier:
my_socket = socket(AF_INET, SOCK_STREAM, 0)
hmm also für was steht dann die 0, wenn nicht für 'true' :confused:
ich dachte, ich war sicher, dass 0 ist gut, true...
gruss
gEry
hier:
my_socket = socket(AF_INET, SOCK_STREAM, 0)
hmm also für was steht dann die 0, wenn nicht für 'true' :confused:
ich dachte, ich war sicher, dass 0 ist gut, true...
gruss
gEry
1. ist true als != 0 definiert und 2. bekommt man da ja einen filedescriptor zurück. aber 0 ist normalerweiße ja stdin (1 ist sdtout und 2 stderr). also schließt du stdin? denn dann könnte eben ein neuer fd echt auf 0 gesetzt werden.
locus vivendi
23-06-2005, 17:34
my_socket = socket(AF_INET, SOCK_STREAM, 0)
Das ist sowieso schon mal falsch. AF_INET gehört da nicht hin. Auch wenn AF_INET gelegentlich gleich PF_INET definiert ist(soweit ich weiss).
denn dann könnte eben ein neuer fd echt auf 0 gesetzt werden.
was meinst du damit? mit fd?
my_socket = socket(PF_INET, SOCK_STREAM, 0)
gibt genau den gleichen fehler raus!!
was meinst du damit? mit fd?
fd = filedescriptor = ähm, "Dateinummer"(?) Dateideskriptor, halt
Sockets sind genauso filedescriptors wie eine Datei, die mit open() geöffnet wurde, oder das was hinter stdin/stdout/stderr steht oder auch pipes.
ok... also ich finde keinen weg mehr... das ist von mir:
socket_client.h:
#include <sys/socket.h>
#include <sys/types.h>
class client
{
public:
struct sockaddr_in dest_addr; // contains data to connect to the server
int my_socket;
int main();
int create_socket(char * controller);
int connect_server(char * controller, char * desti_ip);
};
socket_client.cpp:
#include <fcntl.h>
#include <errno.h>
#include <stropts.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream.h>
#include <string>
#include "socket_client.h"
#define MY_PORT 65023
main()
{
int i = 0;
int z;
client my_object;
char controller[100];
char desti_ip[15];
cout << "Client is starting, please wait..." << endl;
cout << "Please insert the server address:" << endl;
cin >> desti_ip;
while(i == 0)
{
my_object.create_socket(controller);
z = strcmp(controller, "successfull"); // 0 == true
if(z != 0) { cout << controller << endl; break; }
my_object.connect_server(controller, desti_ip);
z = strcmp(controller, "successfull");
if(z != 0) { cout << controller << endl; break; }
i++;
}
return 0;
}
int client::create_socket(char * controller)
{
if(my_socket = socket(AF_INET, SOCK_STREAM, 0) == -1)
{
strcpy(controller, "Socket error!");
return 0;
}
else
{
cout << "Client has created a socket..." << endl;
strcpy(controller, "successfull");
return 0;
}
}
int client::connect_server(char * controller, char * desti_ip)
{
// Infos for connecting to server
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(MY_PORT);
dest_addr.sin_addr.s_addr = inet_addr(desti_ip);
cout << "Client is trying to connect to: " << inet_ntoa(dest_addr.sin_addr) << "..." << endl;
if(connect(my_socket, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) == -1)
{
strcpy(controller, "Connection error!");
perror("connect");
return 0;
}
else
{
cout << "Client is now connected to the server: " << inet_ntoa(dest_addr.sin_addr) << endl;
strcpy(controller, "successfull");
return 0;
}
}
mit dem output:
Client is starting, please wait...
Please insert the server address:
Client has created a socket...
Client is trying to connect to: 127.0.0.1...
connect: Socket operation on non-socket
Connection error!
das ist von nem kollegen:
/* client.c */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define BUF 1024
#define Port 65001
int main (int argc, char **argv) {
int create_socket;
char *buffer=malloc(BUF);
struct sockaddr_in address;
int size;
if( argc < 2 ){
printf("Usage: %s ServerAdresse\n", *argv);
exit(EXIT_FAILURE);
}
printf ("\e[2J");
if ((create_socket = socket (AF_INET, SOCK_STREAM, 0)) > 0)
printf ("Socket wurde angelegt\n");
address.sin_family = AF_INET;
address.sin_port = htons (Port);
inet_aton (argv[1], &address.sin_addr);
if (connect ( create_socket,
(struct sockaddr *) &address,
sizeof (address)) == 0)
printf ("Verbindung mit dem Server (%s) hergestellt\n",
inet_ntoa (address.sin_addr));
do {
size = recv(create_socket, buffer, BUF-1, 0);
if( size > 0)
buffer[size] = '\0';
printf ("Nachricht erhalten: %s\n", buffer);
printf("Befehl eingeben: ");
fgets (buffer, BUF, stdin);
send(create_socket,buffer,strlen(buffer),0);
printf("Nachricht gesendet\n");
} while (strcmp (buffer, "quit\n") != 0);
close (create_socket);
return EXIT_SUCCESS;
}
und das geht -.- kann da einer helfen :confused: :confused:
if(my_socket = socket(AF_INET, SOCK_STREAM, 0) == -1)So bekommt my_socket das Ergebnis des Vergleichs zugewiesen, 0 oder 1. Du hast die Klammern vergessen
if( (my_socket=socket(...))==-1)Wieder ein Grund, warum man besser leserlich schreiben sollte
my_socket=socket...
if (my_socket == -1)...
Hey joghurt!!
Vielen dank!! Das wars... lol hab ich mir an den Kopf gelangt, als ich das sah!! :D :D
gruss
gEry
p.s. besch du e schwizer? :D
p.s. besch du e schwizer? :DNö, wie kommst du auf diese Vermutung?
AFAIK sollte gcc bei sowas ein Warning ausgeben, wenn man mit -Wall kompeliert. Dieses Flag ist sowieso zu empfählen.
wegen Joghurt :pJoghurt gibt es auch in vielen anderen Ländern...
panzi: AFAIK ?? was meinst du? das brauche ich gar net!?
Joghurt: meinst du? hmm... ich habe sie gerne :D
panzi: AFAIK ?? was meinst du? das brauche ich gar net!?
Joghurt: meinst du? hmm... ich habe sie gerne :D
Auf die Gefahr hin, daß ich deine Frage falsch verstanden habe: AFAIK heißt "As far as I know", also "soweit ich weiß".
Und das Flag -Wall sollte man immer mit im Makefile oder dem Compiler Aufruf unterbringen. Spart einem 'ne Menge Fehlersuchen später.
hi!
axo, oki, danke... ich dachte halt an: AF_INET , gibts ja wirklich :P
noch ne frage:
wie heisst der Befehl, mit dem ich eine Eingabe einlesen kann (String mit Leerzeichen), jedoch aber nicht einfach das Letzte was auch den Screen geschrieben wurde einliest?
--> Also kein getline(cin, mystring); // liest immer einfach die letzte ausgabe auf dem screen ein -.-
gruss
gEry
Keiner eine Idee, oder Hilfe? :(
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.