Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 23

Thema: connect: Socket operation on non-socket

  1. #1
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40

    connect: Socket operation on non-socket

    HI!

    ich bekomme die oben stehende fehlermeldung bei dieser code zeile:

    PHP-Code:
    if(connect(my_socket, (struct sockaddr *)&dest_addrsizeof(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

  2. #2
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    hat wirklich keiner hier eine idee...

  3. #3
    Registrierter Benutzer
    Registriert seit
    13.06.2005
    Beiträge
    24
    Hmm also,
    kann sein dass connect Asynchron arbeitet!

    Wäre aber hilfreicher wenn du sagen könnntest welche Klasse das genau ist!

  4. #4
    Registrierter Benutzer
    Registriert seit
    13.06.2005
    Beiträge
    24
    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!

  5. #5
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    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:
    PHP-Code:
    #include <sys/socket.h>
    #include <sys/types.h> 
    wenn ich das mache:
    PHP-Code:
    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 -.-

  6. #6
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von gEry
    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:
    PHP-Code:
    #include <sys/socket.h>
    #include <sys/types.h> 
    wenn ich das mache:
    PHP-Code:
    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.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  7. #7
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    zeig mal deinen socket() aufruf.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  8. #8
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    hier:
    PHP-Code:
    my_socket socket(AF_INETSOCK_STREAM0
    hmm also für was steht dann die 0, wenn nicht für 'true'

    ich dachte, ich war sicher, dass 0 ist gut, true...

    gruss

    gEry

  9. #9
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von gEry
    hier:
    PHP-Code:
    my_socket socket(AF_INETSOCK_STREAM0
    hmm also für was steht dann die 0, wenn nicht für 'true'

    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.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  10. #10
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    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).

  11. #11
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    denn dann könnte eben ein neuer fd echt auf 0 gesetzt werden.
    was meinst du damit? mit fd?


    PHP-Code:
    my_socket socket(PF_INETSOCK_STREAM0
    gibt genau den gleichen fehler raus!!

  12. #12
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von gEry
    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.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  13. #13
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    ok... also ich finde keinen weg mehr... das ist von mir:
    socket_client.h:
    Code:
    #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:
    Code:
    #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:
    Code:
     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:
    Code:
     /* 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

  14. #14
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von gEry
    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

    Code:
    if( (my_socket=socket(...))==-1)
    Wieder ein Grund, warum man besser leserlich schreiben sollte
    Code:
    my_socket=socket...
    if (my_socket == -1)...

  15. #15
    Registrierter Benutzer
    Registriert seit
    01.10.2004
    Beiträge
    40
    Hey joghurt!!

    Vielen dank!! Das wars... lol hab ich mir an den Kopf gelangt, als ich das sah!!

    gruss

    gEry

    p.s. besch du e schwizer?

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •