Advertisement

accept function stopping app

Started by August 09, 2006 04:13 PM
1 comment, last by Terminatore3 18 years, 6 months ago
Hi, I'm sure this is a very obvious question, but I have just started learning about sockets and stuff. When I initialize my sockets on my server I use the accept function to accept any incoming connections. But the problem is I want to be able to stop waiting for more connections if I wanted to, but the accept function seems to freeze the app until it recieves a connection, is there another way of doing this so my app can still run, yet still recieve connections? here's my code to initialize the server

int InitSockets(void)
{
	struct sockaddr *servAddr;
	struct sockaddr_in *inetServAddr;

	int error = 0;

	// Create the socket.
	listeningSocket = socket(AF_INET, SOCK_STREAM, 0);
	printf("Socket\n");

	if(listeningSocket == INVALID_SOCKET)
	{
		printf("error: socket() failed");
		return -1;
	}

	// Allocate memory for the address structure and set it to zero.
	servAddr = (struct sockaddr *) malloc(sizeof(sockaddr));
	memset((char *) servAddr, 0, sizeof(sockaddr));

	// Fill the address structure.
	servAddr->sa_family		= (u_short) AF_INET;
	inetServAddr			= (struct sockaddr_in *) servAddr;
	inetServAddr->sin_port	= htons((u_short) 9009);

	// Bind the address information to the socket.
	error = bind(listeningSocket, servAddr, sizeof(sockaddr));
	printf("bind\n");

	if(error == SOCKET_ERROR)
	{
		printf("error: bind() failed");
		free(servAddr);
		return -1;
	}

	free(servAddr);
	servAddr = NULL;

	// Listen for incoming connections. Queue only one connection.
	error = listen(listeningSocket, 1);
	printf("listen\n");

	if(error == SOCKET_ERROR)
	{
		printf("error: listen() failed");
		return -1;
	}

	// Accept the connection.
	connectedSocket = accept(listeningSocket, NULL, NULL);
	printf("accept\n");

	if(connectedSocket == INVALID_SOCKET)
	{
		printf("error: socket() failed");
		return -1;
	}

	return 0;
}
You can use select() to poll for a waiting connection or use ioctlsocket() with FIONBIO to make the socket enter non-blocking mode.
Advertisement
perfect, looks like the trick, thanks!

This topic is closed to new replies.

Advertisement