Winsocks Fehler 10038 (WSAENOTSOCK)

  • geschlossen
  • C

  • 9999
  • 1570 Aufrufe 6 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Winsocks Fehler 10038 (WSAENOTSOCK)

    Der Quellcode:

    PHP-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <crossnet.h>
    4. int main(int argc, char *argv[])
    5. {
    6. SOCKET sock = create_socket( AF_INET, SOCK_STREAM, 0 );
    7. con(sock,AF_INET,"127.0.0.1",80);
    8. if( (send(sock,"test",sizeof("test"),0)) != -1)
    9. {
    10. printf("sent successful\n");
    11. }
    12. system("Pause");
    13. return 0;
    14. }
    Alles anzeigen


    Die headerdatei crossnet.h:

    PHP-Quellcode

    1. //header file for cross-platform networking
    2. #ifdef __WIN32__
    3. #include <winsock.h>
    4. #endif
    5. #ifdef __linux__
    6. #include <sys/types.h>
    7. #include <sys/socket.h>
    8. #endif
    9. void error_exit(const char *string)
    10. {
    11. #ifdef __WIN32__
    12. printf("%s: %d",string,WSAGetLastError());
    13. #endif
    14. #ifdef __linux__
    15. perror(string);
    16. #endif
    17. exit(-1);
    18. }
    19. int create_socket(int af, int type, int protocol)
    20. {
    21. #ifdef __WIN32__
    22. int err;
    23. LPWSADATA wsadat = (LPWSADATA) malloc(sizeof(LPWSADATA)); //LPWSADATA = wsadat* ==> malloc()
    24. if(WSAStartup(MAKEWORD(2,2),wsadat) != 0)
    25. {
    26. printf("WSAStartup() failed");
    27. exit(-1);
    28. }
    29. #endif
    30. int sock;
    31. if(sock = socket(af,type,protocol) < 0)
    32. {
    33. error_exit("socket creating failed");
    34. }
    35. return sock;
    36. }
    37. void con(int socket, int af, const char *ip, int port)
    38. {
    39. struct sockaddr_in server;
    40. unsigned long addr = inet_addr(ip);
    41. memset( &server, 0, sizeof (server)); //needed?
    42. memcpy((char *) &server.sin_addr, &addr, sizeof(addr));
    43. server.sin_family = af;
    44. server.sin_port = htons(port);
    45. if(connect(socket, (struct sockaddr *)&server, sizeof(server)) != 0)
    46. {
    47. error_exit("connect() failed");
    48. }
    49. }
    Alles anzeigen
  • Ich kann es mir schon denken.
    Er bekommt die Fehlermeldung 10038.

    Die Gründe dafür können sein:
    - socket belegt
    - das was er für einen socket hält ist keiner

    Mal den socket wechseln?
    (was anderes als 127.0.0.1)
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...
  • wasawasa schrieb:

    Er bekommt die Fehlermeldung 10038.


    Stimmt

    wasawasa schrieb:

    - das was er für einen socket hält ist keiner


    Versteh ich jetzt so nicht ganz

    wasawasa schrieb:

    Mal den socket wechseln?
    (was anderes als 127.0.0.1)


    Soeben probiert, kommt aber leider der selbe Fehler

    Broken Sword schrieb:

    9999 drücke dich besser bzw. umfangreicher aus, wenn du willst, dass dir schnell geholfen wird - als Stammuser sich wie ein Neuling aufzuführen..


    Sorry, ich dachte es wäre so verständlich

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von 9999 ()

  • Therdtitel geändert. => edited

    9999 drücke dich besser bzw. umfangreicher aus, wenn du willst, dass dir schnell geholfen wird - als Stammuser sich wie ein Neuling aufzuführen..

    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.
  • Weiß keiner woran es liegen könnte?

    Edit: Fehler gefunden, die if Zeile bei sock funktionierte so nicht, habe jetzt die Zuweisung (sock = socket usw.) und die Überprüfung ob der socket valide ist in zwei Zeilen aufgesplittet

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von 9999 ()

  • Habs auch gerade gefunden.
    Sorry, leider etwas zu spät.
    Aber der Fehler ist gut getarnt.
    Ich habe (zu) lange gebraucht um zu sehen warum die Variable immer 0 ist ...

    Eine korrekte Klammerung hätte es auch getan:
    if ((sock = socket(af,type,protocol)) < 0)

    Ich wollte nur noch mal schreiben warum das so ist:
    Bei der Zeile if(sock = socket(af,type,protocol) < 0) gibt es keine Klammerung.
    Darum zieht die normale Priorität der C++ Operatoren und da liegt "<" vor "=".
    Darum vergleicht er erst mal das Ergebnis der Funktion "socket" mit "0".
    Das Ergebnis ist ein Bool (-1,0). Und das wird der Variable sock zugewiesen

    Ach ja, um meiner Rechthaberei zu fröhnen - ich hatte mit der Aussage "- das was er für einen socket hält ist keiner" recht.

    Quellcode

    1. [U]Level Operator Description[/U]
    2. 1 :: scope
    3. 2 () [] . -> ++ -- cast typeid postfix
    4. 3 ++ -- ~ ! sizeof new delete unary (prefix)
    5. * & indirection and reference (pointers)
    6. + - unary sign operator
    7. 4 (type) type casting
    8. 5 .* ->* pointer-to-member
    9. 6 * / % multiplicative
    10. 7 + - additive
    11. 8 << >> shift
    12. 9 < > <= >= relational
    13. 10 == != equality
    14. 11 & bitwise AND
    15. 12 ^ bitwise XOR
    16. 13 | bitwise OR
    17. 14 && logical AND
    18. 15 || logical OR
    19. 16 ?: conditional
    20. 17 = *= /= %= += -= >>= <<= &= ^= |= assignment
    21. 18 , comma
    Alles anzeigen
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...

    Dieser Beitrag wurde bereits 14 mal editiert, zuletzt von wasawasa ()