Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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: 5714
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: 5714
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: 5714
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