This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

TCP-server cannot accept clients

Hi!

I'm developing a TCP server running on the nRF9160, but there seem to be a problem with accepting clients. The code is very simple, just calls to socket, bind, listen, accept. But the accept fails as soon as a client tries to connect. ERROR on accept returned -1, errno: 134. I have pasted the code below.

I'm connected to a Cat-M network before I start the server and I have successfully connected from the nRF9160 to another server. But I cannot get the nRF9160 to act as a server. Can you please investigate this?

I'm using:
fw-nrfconnect-nrf tag v1.1.0
Zephyr tag v2.0.99-ncs1
nrfxlib v1.1.0
Modem firmware: 1.1.0

int parentfd; /* parent socket */
int childfd; /* child socket */
int portno; /* port to listen on */
int clientlen; /* byte size of client's address */
struct sockaddr_in serveraddr; /* server's addr */
struct sockaddr_in clientaddr; /* client addr */

portno = 8080;
parentfd = socket(AF_INET, SOCK_STREAM, 0);
if (parentfd < 0) {
	LOG_ERR("ERROR opening socket");
	return;
}

memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = INADDR_ANY;
serveraddr.sin_port = htons((unsigned short)portno);

if (bind(parentfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0) {
	LOG_ERR("ERROR on binding");
	return;
}

if (listen(parentfd, 5) < 0) {/* allow 5 requests to queue up */ 
	LOG_ERR("ERROR on listen");
	return;
}

while (1) {
	LOG_INF("TCP server waiting for client...");

	childfd = accept(parentfd, (struct sockaddr *) &clientaddr, &clientlen);
	if (childfd < 0) {
		LOG_ERR("ERROR on accept returned %d, errno: %d", childfd, errno);
		LOG_ERR("Closing server");
		close(parentfd);
		break;
	}

	LOG_INF("server established connection");
	
	tcp_handle_client(childfd);

	close(childfd);
} 

Kind regards

Mattias Eriksson

Parents Reply Children
No Data
Related