Oppure

Loading
28/01/13 17:15
ilvecchio
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)...

#if defined WIN32
#include <winsock.h>

#else
#define closesocket close
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#define BUFFERSIZE 255
#define PROTOPORT 27015
#define QLEN 10


void ErrorHandler(char *errorMessage) {
	perror(errorMessage);
}

void ClearWinSock() {
#if defined WIN32
WSACleanup();
#endif
}
int main(int argc, char *argv[]) {

	int port;
	if (argc > 1) {
		port = atoi(argv[1]);
	} else {
		port = PROTOPORT;
		if (port<0) {
			printf("bad port number %s \n", argv[1]);
			return 0;
		}
	}

#if defined WIN32
	WSADATA wsaData;
	int iResult = WSAStartup(MAKEWORD(2 ,2), &wsaData);
	if (iResult != 0){
	printf ("error at WSASturtup\n");
	return 0;
	} else {
		printf("WSAStartup eseguita\n");
	}
#endif

//Creazione Socket

	int Mysocket;
	Mysocket=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

	if (Mysocket < 0) {
		ErrorHandler("socket creation failed.\n");
		ClearWinSock();
		return 0;
	} else {
		printf("socket inizializzata con successo\n");
	}


	struct sockaddr_in sad;
	memset(&sad, 0, sizeof(sad));
	sad.sin_family = AF_INET;
	sad.sin_addr.s_addr = inet_addr( "127.0.0.1" );
	sad.sin_port = htons(port);

//Bind
	if (bind(Mysocket, (struct sockaddr*) &sad, sizeof(sad)) <0) {
		ErrorHandler("bind() failed.\n");
		closesocket(Mysocket);
		ClearWinSock();
		return 0;
	}

//LISTEN

	if (listen (Mysocket, QLEN) <0) {
		ErrorHandler("listen() failed.\n");
		closesocket(Mysocket);
		ClearWinSock();
		return 0;
	}

struct sockaddr_in cad;
// int Rsocket; //socket remota che comunica con il client
int clientSocket;
int clientLen; //dimensione del indirizzo client
char buf[BUFFERSIZE];
printf( "In attesa di un client con cui comunicare...\n\n");

//Loop Infinito
while (1) {
	memset(&cad, 0, sizeof(cad));
	memset(buf, 0, sizeof(buf));
	clientLen = sizeof(cad);

	//ACCEPT
	if ( (clientSocket = accept(Mysocket, (struct sockaddr *)&cad, &clientLen)) < 0) {
		printf("accept() failed.\n");
		closesocket(Mysocket);
		ClearWinSock();
		return 0;
	} else {
		printf("connesione accettata\n");
	}
}

closesocket(Mysocket);

#if defined WIN32
	WSACleanup();
	#endif
return EXIT_SUCCESS;

}


Grazie a tutti per qualsiasi chiarimento
Ultima modifica effettuata da ilvecchio 28/01/13 17:17
aaa
28/01/13 20:01
nessuno
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à.
29/01/13 15:46
ilvecchio91
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 29/01/13 15:47
aaa
30/01/13 9:26
nessuno
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à.
30/01/13 9:40
ilvecchio91

Hai qualche consiglio per cercare di risolvere questa cosa?
aaa
30/01/13 9:47
nessuno
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à.