13.07.2015 Views

Beej's Guide to Network Programming Using Internet Sockets

Beej's Guide to Network Programming Using Internet Sockets

Beej's Guide to Network Programming Using Internet Sockets

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Beej’s <strong>Guide</strong> <strong>to</strong> <strong>Network</strong> <strong>Programming</strong> <strong>Using</strong> <strong>Internet</strong> <strong>Sockets</strong> 30#include #include #include #include #include #include #include #include #define PORT 9034// port we’re listening onint main(void){fd_set master; // master file descrip<strong>to</strong>r listfd_set read_fds; // temp file descrip<strong>to</strong>r list for select()struct sockaddr_in myaddr; // server addressstruct sockaddr_in remoteaddr; // client addressint fdmax; // maximum file descrip<strong>to</strong>r numberint listener; // listening socket descrip<strong>to</strong>rint newfd; // newly accept()ed socket descrip<strong>to</strong>rchar buf[256]; // buffer for client dataint nbytes;int yes=1; // for setsockopt() SO_REUSEADDR, belowsocklen_t addrlen;int i, j;FD_ZERO(&master);FD_ZERO(&read_fds);// clear the master and temp sets// get the listenerif ((listener = socket(PF_INET, SOCK_STREAM, 0)) == -1) {perror("socket");exit(1);}// lose the pesky "address already in use" error messageif (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes,sizeof(int)) == -1) {perror("setsockopt");exit(1);}// bindmyaddr.sin_family = AF_INET;myaddr.sin_addr.s_addr = INADDR_ANY;myaddr.sin_port = h<strong>to</strong>ns(PORT);memset(&(myaddr.sin_zero), ’\0’, 8);if (bind(listener, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1) {perror("bind");exit(1);}// listenif (listen(listener, 10) == -1) {perror("listen");exit(1);}// add the listener <strong>to</strong> the master setFD_SET(listener, &master);// keep track of the biggest file descrip<strong>to</strong>rfdmax = listener; // so far, it’s this one// main loopfor(;;) {read_fds = master; // copy it

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!