Partage
  • Partager sur Facebook
  • Partager sur Twitter

socket

trop lent

Sujet résolu
    6 décembre 2006 à 12:59:36

    Bonjour a tous amis Zéro,
    Bon alors voila j'ai une fonction pour les sockets mais elle est beaucoup trop longue a mon gout alors est ce que quelqu'un pourrais m'aider a "bouster" sa durée d'execution

    voila ma fonction
    char* get_socket(const char* host, const char* req, int port)
    {
        unsigned t = time(NULL);
        char* buffer[1024];

        WSADATA WSAData;
        SOCKET sock;
        SOCKADDR_IN sin;
        HOSTENT* hp = NULL;

        WSAStartup(MAKEWORD(2,0), &WSAData);
        sock = socket(AF_INET,SOCK_STREAM,0);

        hp = gethostbyname (host);
        memcpy((char*)&sin.sin_addr, hp->h_addr, hp->h_length);
        sin.sin_family = AF_INET;
        sin.sin_port = htons(port);

        if (connect(sock, (SOCKADDR*)&sin, sizeof(sin)) == -1)
            return "[-]Connection failed.\n";

        send(sock, req, strlen(req), 0);

        recv(sock, buffer, sizeof(buffer), 0);

        closesocket(sock);
        WSACleanup();

        printf("[+]Socket executed in %u seconds\n", (unsigned) time(NULL) - t);
        return buffer;
    }

    en ce moment même elle s'execute en 2s et moi je voudrais quelle passe a 1s ou même moins si c'est possible
    merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      6 décembre 2006 à 13:04:37

      char* buffer[1024];

      A remplacer par ...
      char buffer[1024];


      2 secondes c'est correct je trouve, après ça dépend de ta connexion ;)

      Puis il y a un autre problème, c'est que la variable buffer est détruite à la fermeture du bloc (fin de la fonction), donc ça sert à rien de la renvoyer.
      Tu devrais faire comme ceci :
      char* buffer = calloc (1024, sizeof *buffer);
      /* ... */
      recv(sock, buffer, 1024, 0);
      /* ... */
      /* Ensuite quand tu appelles la fonction tu n'oubli pas de free () la variable */
      char* reponse = get_socket ("127.0.0.1", "Salut", 1337);
      printf ("%s\n", reponse);
      free (reponse);
      • Partager sur Facebook
      • Partager sur Twitter
        6 décembre 2006 à 13:16:32

        non le buffer c'est fais expres sinon sa me prend trop de mémoire deja que le prog est un peu lourd

        et oué c'est moi qui doit avoir une connexion de merde

        edit: oué c'était bien ma connexion je viens de rééssayer et c'est desendu en dessous de la barre des 1s
        • Partager sur Facebook
        • Partager sur Twitter
          6 décembre 2006 à 13:23:57

          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>
          #include <winsock2.h>


          char* get_socket(const char* host, const char* req, int port)
          {
              unsigned t = time(NULL);
              char* buffer[1024];

              WSADATA WSAData;
              SOCKET sock;
              SOCKADDR_IN sin;
              HOSTENT* hp = NULL;

              WSAStartup(MAKEWORD(2,0), &WSAData);
              sock = socket(AF_INET,SOCK_STREAM,0);

              hp = gethostbyname (host);
              memcpy((char*)&sin.sin_addr, hp->h_addr, hp->h_length);
              sin.sin_family = AF_INET;
              sin.sin_port = htons(port);

              if (connect(sock, (SOCKADDR*)&sin, sizeof(sin)) == -1)
                  return "[-]Connection failed.\n";

              send(sock, req, strlen(req), 0);

              recv(sock, buffer, sizeof(buffer), 0);

              closesocket(sock);
              WSACleanup();

              printf("[+]Socket executed in %u seconds\n", (unsigned) time(NULL) - t);
              return buffer;
          }


          int main (void)
          {
             return 0;
          }
          Project : Console application
          Compiler : GNU GCC Compiler (called directly)
          Directory : G:\Documents and Settings\ddxs\Bureau\
          ----------------------------------------------------
          Switching to target: default
          Compiling: main.c
          main.c: In function `get_socket':
          main.c:26: warning: return discards qualifiers from pointer target type
          main.c:30: warning: passing arg 2 of `recv' from incompatible pointer type
          main.c:36: warning: return from incompatible pointer type
          main.c:36: warning: function returns address of local variable
          Linking console executable: G:\Documents and Settings\ddxs\Bureau\console.exe
          Process terminated with status 0 (0 minutes, 1 seconds)
          0 errors, 4 warnings


          Corrige tous ces warnings.
          • Partager sur Facebook
          • Partager sur Twitter
            6 décembre 2006 à 13:26:04

            c'est bon j'ai tout corriger
            meme si je n'ai jamais eu de warning

            edit: j'ai vraiment une connexion de merde ma fonction va de 4s a 0s d'execution selon si ma connexion est contente ou pas

            encore merci ddx39 et utilise quoi comme compiler
            • Partager sur Facebook
            • Partager sur Twitter
              6 décembre 2006 à 13:40:20

              C'est ecrit, c'est GCC.

              Sûrement une histoire d'options de compilation. Met au moins -W -Wall -O2.
              • Partager sur Facebook
              • Partager sur Twitter
                6 décembre 2006 à 13:51:23

                Exact,
                -W -Wall -Wextra -O2 -Wwrite-strings -Wstrict-prototypes
                • Partager sur Facebook
                • Partager sur Twitter
                  6 décembre 2006 à 13:53:28

                  lol
                  bon ceci dit il n'y avait pas d'erreur dans mon code
                  a par le buffer mais j'en faisais une autre utilisation
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 décembre 2006 à 13:53:38

                    -Wwrite-strings -Wstrict-prototypes

                    Je vois souvent ces deux options mais je ne les connais pas, tu peut le décrire ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      6 décembre 2006 à 15:03:03

                      Citation : -ed- (sur son site)


                      Il est aussi possible de procéder à un reglage 'fin'. Voici comment je configure gcc en mode 'paranoïaque'

                      -O2 -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int
                      -Werror-implicit-function-declaration -Wmain -Wparentheses
                      -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused
                      -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef
                      -Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings
                      -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes
                      -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn
                      -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations
                      -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long
                      -Wunreachable-code





                      y'a pas a dire, c'est un violent le ed o_O
                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 décembre 2006 à 16:12:19

                        C'est fou ! Quel monde de mazochistes, j'adore ! :D:D:D !!!
                        • Partager sur Facebook
                        • Partager sur Twitter

                        socket

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown