#include #include #include #include #include #include #include #include #define BUFSIZE 1024 extern int errno; void error(char *msg) { perror(msg); exit(0); } void showdefaultvalues(int s) { int optval, retval, optlen; optlen = sizeof(int); retval = getsockopt(s,IPPROTO_TCP,TCP_MAXSEG,&optval,&optlen); if (retval==0) printf("Max Segment Size is %d\n",optval); else perror("Error getting MSS"); retval = getsockopt(s,IPPROTO_IP,IP_TTL,&optval,&optlen); if (retval==0) printf("TTL is %d\n",optval); else perror("Error getting TTL"); retval = getsockopt(s,SOL_SOCKET,SO_RCVBUF,&optval,&optlen); if (retval==0) printf("Receiver Buffer is %d\n",optval); else perror("Error getting RCVBUF"); retval = getsockopt(s,SOL_SOCKET,SO_SNDBUF,&optval,&optlen); if (retval==0) printf("Send Buffer is %d\n",optval); else perror("Error getting SNDBUF"); } int main() { int sock, newsock, len, fromlen, n; unsigned short port; struct sockaddr_in server, from; char buffer[1024]; port = (unsigned short) 51717; sock=socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) error("Opening socket"); server.sin_family=AF_INET; server.sin_addr.s_addr=INADDR_ANY; server.sin_port=htons(port); len=sizeof(server); if (bind(sock, (struct sockaddr *)&server, len) < 0) error("binding socket"); fromlen=sizeof(from); if (listen(sock,5) < 0) error("listening"); showdefaultvalues(sock); while (1) { newsock=accept(sock, (struct sockaddr *)&from, &fromlen); if (newsock < 0) error("Accepting"); printf("A connection has been accepted from %s\n", inet_ntoa((struct in_addr)from.sin_addr)); showdefaultvalues(newsock); n = recv(newsock,buffer,BUFSIZE-1,0); if (n < 1) { error("Reading"); } else { char *msg = "Hello from the server"; buffer[n]='\0'; printf("Message from client is: %s\n",buffer); len = strlen(msg); n = send(newsock,msg,len,0); if (n < len) error("Error writing"); if (close(newsock) < 0) error("closing"); } } return 0; // we never get here }