Created
November 6, 2022 05:05
-
-
Save leveryd/83038ce5b53a34435c9c0888235bf7bd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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