多线程使用SO_REUSEPORT来实现多个socket监听同一个端口
在十几年前的 FreeBSD 中就存在 SO_REUSEPORT 参数来实现多个 socket 监听同一个端口,来提升服务器的负载,在 Linux 3.9 开始也引入了这个功能,下面就看一下例子。
#include <unistd.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <stdbool.h> #include <arpa/inet.h> #include <pthread.h>void* do_work(void *arg) {int *port = (int *) arg;int listen_socket = socket(AF_INET, SOCK_STREAM, 0);int one = 1;setsockopt(listen_socket, SOL_SOCKET, SO_REUSEPORT, &one, sizeof(one));struct sockaddr_in serv_addr;memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = INADDR_ANY;serv_addr.sin_port = htons(*port);int ret = bind(listen_socket, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); listen(listen_socket, 5);struct sockaddr_in cli_addr;memset(&cli_addr, 0, sizeof(cli_addr));int addr_length = sizeof(cli_addr);do{int cli_sock = accept(listen_socket, (struct sockaddr *) &cli_addr, (socklen_t *) &addr_length);close(cli_sock);} while (true);close(listen_socket);return 0; }int main(int ac, const char *av[]) { int port = atoi(av[1]);const int MAX_THREADS = 10;pthread_t tid[MAX_THREADS];for (int i = 0; i < MAX_THREADS; i++) {pthread_create(&tid[i], NULL, do_work, &port);}for (int i = 0; i < MAX_THREADS; i++) {pthread_join(tid[i], NULL);}return 0; }
多线程使用SO_REUSEPORT来实现多个socket监听同一个端口相关推荐
- java 多线程监听同一个端口_使用多线程在Java服务器中同时侦听两个端口
我正在构建一个简单的Java服务器,该服务器使用两个ServerSocket实例同时在两个端口上同时侦听客户端请求.这是服务器的代码: import java.io.PrintWriter; impo ...
- java多进程端口复用_多个程序监听同一端口 - socket端口复用技术
对于多个程序绑定同一个端口我们遇到最多的是(Port 80 was already in use),也就是说端口被占用,不能重复绑定,但是操作系统内核支持通过配置socket参数的方式来实现多个进程绑 ...
- java多进程端口复用_多个程序监听同一端口 - socket端口复用技术
对于多个程序绑定同一个端口我们遇到最多的是(Port 80 was already in use),也就是说端口被占用,不能重复绑定,但是操作系统内核支持通过配置socket参数的方式来实现多个进程绑 ...
- java监听某端口和ip_Java 通过Socket监听指定服务器(IP)的指定端口,及向指定服务器的指定端口发送信息...
客户端:向指定端口发送信息 package com.jszc.lottery.modules.longpay.util; import java.io.BufferedReader; import j ...
- Linux内核网络协议栈8—socket监听
几个问题 了解以下几个问题的同学可以直接忽略下文: 1.listen 库函数主要做了什么? 2. 什么是最大并发连接请求数? 3.什么是等待连接队列? socket 监听相对还是比较简单的,先看 ...
- 渡一教育_Java每日一练:建立Statement的作用是什么、前端Console.log( Boolean(‘‘))输出的是什么、如果希望1监听TCP端口为9000,服务端应该怎样创建socket
系列文章目录 文章目录 系列文章目录 题目1java部分建立Statement的作用是什么(答案在最后公布) 题目1 - 答案 ==解析== ==答案== 题目2 前端 js部分 ==答案== 题目3 ...
- java起socket监听,java socket 监听示例,javasocket,java socket监
java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...
- python socket监听端口_Python 用socket模块实现检测端口和检测web服务
检测端口 check_tcp_port.py #!/usr/bin/env python import socket import re import sys def check_server(add ...
- socket监听端口实现实时通讯
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
最新文章
- 亮度翻转_ROG幻13翻转本发布;联想IdeaPad 5G轻薄本即将上线
- 分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日)
- python软件开发-有哪些值得推荐的 Python 开发工具?
- 笨方法学python3怎么样_有个很笨的女朋友,是怎么样的体验?
- 百面机器学习 #3 经典算法:02 逻辑回归
- 使用游标正确提取SQL Server数据并将其放置在Reporting Services矩阵中
- linux/unix下telnet提示Escape character is '^]'的意义
- js 中使用map的两种方式
- js createelement_如何在vue中继续使用layer.js,亲测好用
- duilib加载资源
- 智能耳机测试软件,内置心率监测仪 捷波朗运动耳塞体验!
- 安卓开发——做一个能定时唤起其他APP的闹钟程序
- 【python】查找array中非零元素的横纵坐标
- 《苏菲的世界》读书笔记之一:自然派哲学家
- vue实现纯前端导入与解析excel表格文件,导出Excel
- android apktool使用教程,Apktool 使用教程
- win7任务栏右下角图标空白解决办法
- 玫瑰李文案:玫瑰李水果店的文案怎么写
- 精妙绝伦的设计模式:策略模式+模板模式+工厂模式
- 英语系高手的整理!不想过四六级都难啊