For one thing, it should be
clntsock.sin_addr.s_addr = hton(INADDR_ANY);
Here's a function that will create a socket that listens for connections to get you going:
int init_socket_on_port(unsigned short port)
{
struct sockaddr_in serv_addr;
const int one = 1;
int sockfd;
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("socket()");
return -1;
}
memset( &serv_addr, 0, sizeof serv_addr);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(port);
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof one);
if( bind(sockfd, (struct sockaddr *) &serv_addr, sizeof serv_addr) < 0)
{
perror("bind");
close(sockfd);
return -1;
}
listen(sockfd, 1);
printf("listening ... on socket \n");
return sockfd;
}
You'll probably want to change the error handling,as
perror()
may not be the right thing, and you'll still need to call
accept()
on the returned socket.