Tell a socket to listen for incoming connections
int listen(int s, int backlog);
You can take your socket descriptor (made with the socket() system call) and tell it to listen for incoming connections. This is what differentiates the servers from the clients, guys.
The backlog parameter can mean a couple different things depending on the system you on, but loosely it is how many pending connections you can have before the kernel starts rejecting new ones. So as the new connections come in, you should be quick to accept() them so that the backlog doesn't fill. Try setting it to 10 or so, and if your clients start getting "Connection refused" under heavy load, set it higher.
Before calling listen(), your server should call bind() to attach itself to a specific port number. That port number (on the server's IP address) will be the one that clients connect to.
Returns zero on success, or -1 on error (and errno will be set accordingly.)
int s; struct sockaddr_in myaddr; myaddr.sin_family = AF_INET; myaddr.sin_port = htons(3490); // clients connect to this port myaddr.sin_addr.s_addr = INADDR_ANY; // autoselect IP address s = socket(PF_INET, SOCK_STREAM, 0); bind(s, (struct sockaddr*)myaddr, sizeof(myaddr)); listen(s, 10); // set s up to be a server (listening) socket // then have an accept() loop down here somewhere
accept(), bind(), socket()