C socket programming: client send() but server select() doesn't see it
Hey all, I have a server and a client running on two different machines where the client `send()`s but the server doesn't seem to receive the message. The server employs `select()` to monitor sockets for any incoming connections/messages. I can see that when the server accepts a new connection, it updates the `fd_set` array but always returns 0 despite the client `send()` messages. The connection is TCP and the machines are separated by like one router so dropping packets are highly unlikely.

I have a feeling that it's not `select()` but perhaps `send()`/`sendto()` from client that may be the problem but I'm not sure how to go about localizing the problem area.

    	while(1)
	{
		readset = info->read_set;	
		ready = select(info->max_fd+1, &readset, NULL, NULL, &timeout);
}

above is the server side code where the server has a thread that runs `select()` indefinitely.

	rv = connect(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
	printf("rv = %i\n", rv);
	if (rv < 0)
	{
		printf("MAIN: ERROR connect() %i:  %s\n", errno, strerror(errno));
		exit(1);
	}
	else
		printf("connected\n");
		
	sleep(3);
		
	char * somemsg = "is this working yet?\0";
	rv = send(sockfd, somemsg, sizeof(somemsg), NULL);
	if (rv < 0)
		printf("MAIN: ERROR send() %i:  %s\n", errno, strerror(errno));
	printf("MAIN: rv is %i\n", rv);
	rv = sendto(sockfd, somemsg, sizeof(somemsg), NULL, &server_address, sizeof(server_address));
	if (rv < 0)
		printf("MAIN: ERROR sendto() %i:  %s\n", errno, strerror(errno));
	printf("MAIN: rv is %i\n", rv);

and this is the client side where it connects and sends messages and returns

    connected
    MAIN: rv is 4
    MAIN: rv is 4

any comments or insightful insights are appreciated.
C socket programming: client send() but server select() doesn't see it
===

Hey all, I have a server and a client running on two different machines where the client `send()`s but the server doesn't seem to receive the message. The server employs `select()` to monitor sockets for any incoming connections/messages. I can see that when the server accepts a new connection, it updates the `fd_set` array but always returns 0 despite the client `send()` messages. The connection is TCP and the machines are separated by like one router so dropping packets are highly unlikely.

I have a feeling that it's not `select()` but perhaps `send()`/`sendto()` from client that may be the problem but I'm not sure how to go about localizing the problem area.

    	while(1)
	{
		readset = info->read_set;	
		ready = select(info->max_fd+1, &readset, NULL, NULL, &timeout);
}

above is the server side code where the server has a thread that runs `select()` indefinitely.

	rv = connect(sockfd, (struct sockaddr *) &server_address, sizeof(server_address));
	printf("rv = %i\n", rv);
	if (rv < 0)
	{
		printf("MAIN: ERROR connect() %i:  %s\n", errno, strerror(errno));
		exit(1);
	}
	else
		printf("connected\n");
		
	sleep(3);
		
	char * somemsg = "is this working yet?\0";
	rv = send(sockfd, somemsg, sizeof(somemsg), NULL);
	if (rv < 0)
		printf("MAIN: ERROR send() %i:  %s\n", errno, strerror(errno));
	printf("MAIN: rv is %i\n", rv);
	rv = sendto(sockfd, somemsg, sizeof(somemsg), NULL, &server_address, sizeof(server_address));
	if (rv < 0)
		printf("MAIN: ERROR sendto() %i:  %s\n", errno, strerror(errno));
	printf("MAIN: rv is %i\n", rv);

and this is the client side where it connects and sends messages and returns

    connected
    MAIN: rv is 4
    MAIN: rv is 4

any comments or insightful insights are appreciated.