Skip to content

Instantly share code, notes, and snippets.

@holmeshe
Last active June 4, 2018 00:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save holmeshe/7157ca6174964e1114a7d670e581416a to your computer and use it in GitHub Desktop.
Save holmeshe/7157ca6174964e1114a7d670e581416a to your computer and use it in GitHub Desktop.
...include
#define BUF_SIZE 256
int main(int argc, char *argv[])
{
int sfd, rfd, portno, clilen;
char buffer[BUF_SIZE];
struct sockaddr_in serv_addr, cli_addr;
int n;
int flags = 1;
if (argc < 2) { perror("ERROR: no port\n"); exit(0); }
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) { perror("ERROR: socket()"); exit(0); }
flags = 10;
if (setsockopt(sfd, SOL_TCP, TCP_KEEPIDLE, (void *)&flags, sizeof(flags))) { perror("ERROR: setsocketopt(), SO_KEEPIDLE"); exit(0); };
flags = 5;
if (setsockopt(sfd, SOL_TCP, TCP_KEEPCNT, (void *)&flags, sizeof(flags))) { perror("ERROR: setsocketopt(), SO_KEEPCNT"); exit(0); };
flags = 5;
if (setsockopt(sfd, SOL_TCP, TCP_KEEPINTVL, (void *)&flags, sizeof(flags))) { perror("ERROR: setsocketopt(), SO_KEEPINTVL"); exit(0); };
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { perror("ERROR: bind()"); exit(0); }
listen(sfd, 5);
while (1) {
clilen = sizeof(cli_addr);
rfd = accept(sfd, (struct sockaddr *) &cli_addr, &clilen);
if (rfd < 0) { perror("ERROR: accept()"); exit(0); }
while (1) {
flags =1;
if (setsockopt(rfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&flags, sizeof(flags))) { perror("ERROR: setsocketopt(), SO_KEEPALIVE"); exit(0); };
n = read(rfd, buffer, BUF_SIZE);
if (n <= 0) { printf("read() ends\n"); break; }
printf("received: %s %d\n", buffer, n);
snprintf(buffer, BUF_SIZE, "got it");
n = write(rfd, buffer, BUF_SIZE);
if (n < 0) { perror("ERROR: write()"); exit(0); }
}
}
return 0;
}
70,0-1 Bo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment