Skip to content

Instantly share code, notes, and snippets.

@leveryd
Created November 6, 2022 05:05
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 leveryd/83038ce5b53a34435c9c0888235bf7bd to your computer and use it in GitHub Desktop.
Save leveryd/83038ce5b53a34435c9c0888235bf7bd to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv) {
int listenfd, connfd;
socklen_t clilen;
struct sockaddr_in cliaddr, servaddr;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(9000);
// sockfd为需要端口复用的套接字
int opt = 1;
setsockopt(listenfd, SOL_SOCKET, SO_REUSEPORT, (const void *)&opt, sizeof(opt));
/* bind到本地地址,端口为9000 */
int err = bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
printf("%d\n", err);
/* listen的backlog为1024 */
listen(listenfd, 1024);
/* 循环处理用户请求 */
for (;;) {
clilen = sizeof(cliaddr);
connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen);
printf("done\n");
close(connfd); /* 关闭连接套接字,注意不是监听套接字*/
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment