soap_done() schließt den socket nicht

grandmetre

Mitglied
Hallo an alle,

ich habe das Problem, dass soap_done() aus der gSoap-Bibliothek den Socket nicht richtig schließt, denn wenn ich kurz nach Beenden des Programms es wieder aufrufe, bekomme ich ein

Code:
Error 28 fault: SOAP-ENV:Server [no subcode]
"Address already in use"
Detail: bind failed in soap_bind()

Erst wenn ich ein wenig warte ist der Socket wieder zugänglich. Ist dies ein bekanntes Problem, oder stelle ich mich mal wieder nur doof an? :)

Hier der aus der gSoap doc benutzte Code:

Code:
		int m, s; //master and slave sockets
		soap_init(&soap); //use the service operation request dispatcher
	//	printf("connecting socket to \"%s:%d\"\n", url, port);
		m = soap_bind(&soap, url, port, 100); //(soap struct, url(NULL stands for localhost), port, )
		if(m < 0){
			fprintf(stderr, "rcTestClient: could not bind socket\n");
			soap_print_fault(&soap, stderr);
			exit(-1);
		} else {


			s = soap_accept(&soap);
			if(s < 0){
				soap_print_fault(&soap, stderr);
				return -1;
			}
	//		printf("%d; accept connection from IP=%ld.%ld.%ld.%ld socket = %d\n", i,
	//				(soap.ip>>24)&0XFF, (soap.ip>>16)&0XFF, (soap.ip>>8)&0XFF, soap.ip&0XFF, s);
			if (soap_serve(&soap) != SOAP_OK){ // process RPC request
				soap_print_fault(&soap, stderr); //print error
			}


			soap_destroy(&soap);
			soap_end(&soap);

		}
		soap_done(&soap); //close master socket and detach socket
		return 0;

Ich habe die Schleife zum erneuten Warten auf Anfragen bewusst weggelassen.
 
Zurück