Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Socket C: errore function bind()
Forum - C/C++ - Socket C: errore function bind()

Avatar
ilvecchio (Normal User)
Newbie


Messaggi: 1
Iscritto: 28/01/2013

Segnala al moderatore
Postato alle 18:15
Lunedì, 28/01/2013
Salve a tutti!

Sono nuovo su questo blog. Avrei una domanda da farvi, sto programmando una socket in C (su localhost) ma l'esecuzione termina quando si arriva alla bind() segnalandomi un errore "Result too large"

Qualcuno può aiutarmi? Posto il codice (lato server)...

Codice sorgente - presumibilmente C++

  1. #if defined WIN32
  2. #include <winsock.h>
  3.  
  4. #else
  5. #define closesocket close
  6. #include <sys/socket.h>
  7. #include <arpa/inet.h>
  8. #include <unistd.h>
  9. #endif
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <errno.h>
  13. #define BUFFERSIZE 255
  14. #define PROTOPORT 27015
  15. #define QLEN 10
  16.  
  17.  
  18. void ErrorHandler(char *errorMessage) {
  19.         perror(errorMessage);
  20. }
  21.  
  22. void ClearWinSock() {
  23. #if defined WIN32
  24. WSACleanup();
  25. #endif
  26. }
  27. int main(int argc, char *argv[]) {
  28.  
  29.         int port;
  30.         if (argc > 1) {
  31.                 port = atoi(argv[1]);
  32.         } else {
  33.                 port = PROTOPORT;
  34.                 if (port<0) {
  35.                         printf("bad port number %s \n", argv[1]);
  36.                         return 0;
  37.                 }
  38.         }
  39.  
  40. #if defined WIN32
  41.         WSADATA wsaData;
  42.         int iResult = WSAStartup(MAKEWORD(2 ,2), &wsaData);
  43.         if (iResult != 0){
  44.         printf ("error at WSASturtup\n");
  45.         return 0;
  46.         } else {
  47.                 printf("WSAStartup eseguita\n");
  48.         }
  49. #endif
  50.  
  51. //Creazione Socket
  52.  
  53.         int Mysocket;
  54.         Mysocket=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  55.  
  56.         if (Mysocket < 0) {
  57.                 ErrorHandler("socket creation failed.\n");
  58.                 ClearWinSock();
  59.                 return 0;
  60.         } else {
  61.                 printf("socket inizializzata con successo\n");
  62.         }
  63.  
  64.  
  65.         struct sockaddr_in sad;
  66.         memset(&sad, 0, sizeof(sad));
  67.         sad.sin_family = AF_INET;
  68.         sad.sin_addr.s_addr = inet_addr( "127.0.0.1" );
  69.         sad.sin_port = htons(port);
  70.  
  71. //Bind
  72.         if (bind(Mysocket, (struct sockaddr*) &sad, sizeof(sad)) <0) {
  73.                 ErrorHandler("bind() failed.\n");
  74.                 closesocket(Mysocket);
  75.                 ClearWinSock();
  76.                 return 0;
  77.         }
  78.  
  79. //LISTEN
  80.  
  81.         if (listen (Mysocket, QLEN) <0) {
  82.                 ErrorHandler("listen() failed.\n");
  83.                 closesocket(Mysocket);
  84.                 ClearWinSock();
  85.                 return 0;
  86.         }
  87.  
  88. struct sockaddr_in cad;
  89. // int Rsocket; //socket remota che comunica con il client
  90. int clientSocket;
  91. int clientLen; //dimensione del indirizzo client
  92. char buf[BUFFERSIZE];
  93. printf( "In attesa di un client con cui comunicare...\n\n");
  94.  
  95. //Loop Infinito
  96. while (1) {
  97.         memset(&cad, 0, sizeof(cad));
  98.         memset(buf, 0, sizeof(buf));
  99.         clientLen = sizeof(cad);
  100.  
  101.         //ACCEPT
  102.         if ( (clientSocket = accept(Mysocket, (struct sockaddr *)&cad, &clientLen)) < 0) {
  103.                 printf("accept() failed.\n");
  104.                 closesocket(Mysocket);
  105.                 ClearWinSock();
  106.                 return 0;
  107.         } else {
  108.                 printf("connesione accettata\n");
  109.         }
  110. }
  111.  
  112. closesocket(Mysocket);
  113.  
  114. #if defined WIN32
  115.         WSACleanup();
  116.         #endif
  117. return EXIT_SUCCESS;
  118.  
  119. }



Grazie a tutti per qualsiasi chiarimento

Ultima modifica effettuata da ilvecchio il 28/01/2013 alle 18:17
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:01
Lunedì, 28/01/2013
A me non dà errori.

Compilatore? Ambiente?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ilvecchio91 (Normal User)
Newbie


Messaggi: 2
Iscritto: 29/01/2013

Segnala al moderatore
Postato alle 16:46
Martedì, 29/01/2013
Ho un sistema operativo Windows 7 a 64 bit mentre il compilatore che sto usando è il MinGW GCC su Eclipse CDT...

Ultima modifica effettuata da ilvecchio91 il 29/01/2013 alle 16:47
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:26
Mercoledì, 30/01/2013
Io ho provato con Visual C++ (Visual Studio 2010). Non so che dirti ... mi sembra un bug dell'ambiente/compilatore usato.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ilvecchio91 (Normal User)
Newbie


Messaggi: 2
Iscritto: 29/01/2013

Segnala al moderatore
Postato alle 10:40
Mercoledì, 30/01/2013

Hai qualche consiglio per cercare di risolvere questa cosa?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:47
Mercoledì, 30/01/2013
L'unica cosa che ti posso suggerire è di cambiare strumenti di compilazione, non posso dirti altro perché non ho installato Eclipse/GCC su Windows (per Windows preferisco Visual Studio)


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote