在十几年前的 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监听同一个端口相关推荐

  1. java 多线程监听同一个端口_使用多线程在Java服务器中同时侦听两个端口

    我正在构建一个简单的Java服务器,该服务器使用两个ServerSocket实例同时在两个端口上同时侦听客户端请求.这是服务器的代码: import java.io.PrintWriter; impo ...

  2. java多进程端口复用_多个程序监听同一端口 - socket端口复用技术

    对于多个程序绑定同一个端口我们遇到最多的是(Port 80 was already in use),也就是说端口被占用,不能重复绑定,但是操作系统内核支持通过配置socket参数的方式来实现多个进程绑 ...

  3. java多进程端口复用_多个程序监听同一端口 - socket端口复用技术

    对于多个程序绑定同一个端口我们遇到最多的是(Port 80 was already in use),也就是说端口被占用,不能重复绑定,但是操作系统内核支持通过配置socket参数的方式来实现多个进程绑 ...

  4. java监听某端口和ip_Java 通过Socket监听指定服务器(IP)的指定端口,及向指定服务器的指定端口发送信息...

    客户端:向指定端口发送信息 package com.jszc.lottery.modules.longpay.util; import java.io.BufferedReader; import j ...

  5. Linux内核网络协议栈8—socket监听

    几个问题  了解以下几个问题的同学可以直接忽略下文: 1.listen 库函数主要做了什么?  2. 什么是最大并发连接请求数?  3.什么是等待连接队列? socket 监听相对还是比较简单的,先看 ...

  6. 渡一教育_Java每日一练:建立Statement的作用是什么、前端Console.log( Boolean(‘‘))输出的是什么、如果希望1监听TCP端口为9000,服务端应该怎样创建socket

    系列文章目录 文章目录 系列文章目录 题目1java部分建立Statement的作用是什么(答案在最后公布) 题目1 - 答案 ==解析== ==答案== 题目2 前端 js部分 ==答案== 题目3 ...

  7. java起socket监听,java socket 监听示例,javasocket,java socket监

    java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...

  8. python socket监听端口_Python 用socket模块实现检测端口和检测web服务

    检测端口 check_tcp_port.py #!/usr/bin/env python import socket import re import sys def check_server(add ...

  9. socket监听端口实现实时通讯

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

最新文章

  1. 亮度翻转_ROG幻13翻转本发布;联想IdeaPad 5G轻薄本即将上线
  2. 分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日)
  3. python软件开发-有哪些值得推荐的 Python 开发工具?
  4. 笨方法学python3怎么样_有个很笨的女朋友,是怎么样的体验?
  5. 百面机器学习 #3 经典算法:02 逻辑回归
  6. 使用游标正确提取SQL Server数据并将其放置在Reporting Services矩阵中
  7. linux/unix下telnet提示Escape character is '^]'的意义
  8. js 中使用map的两种方式
  9. js createelement_如何在vue中继续使用layer.js,亲测好用
  10. duilib加载资源
  11. 智能耳机测试软件,内置心率监测仪 捷波朗运动耳塞体验!
  12. 安卓开发——做一个能定时唤起其他APP的闹钟程序
  13. 【python】查找array中非零元素的横纵坐标
  14. 《苏菲的世界》读书笔记之一:自然派哲学家
  15. vue实现纯前端导入与解析excel表格文件,导出Excel
  16. android apktool使用教程,Apktool 使用教程
  17. win7任务栏右下角图标空白解决办法
  18. 玫瑰李文案:玫瑰李水果店的文案怎么写
  19. 精妙绝伦的设计模式:策略模式+模板模式+工厂模式
  20. 英语系高手的整理!不想过四六级都难啊

热门文章

  1. python3 sys模块
  2. ab压力测试_CentOS安装压力测试工具ApacheBench(ab)
  3. 数据结构之稀疏数组 - SparseArray
  4. 面试题整理5 顺时针打印矩阵
  5. Java中六大时间类的使用和区别
  6. Java 重入锁 ReentrantLock 原理分析
  7. Java字符串中常见的10个问题
  8. 什么是Code Review 代码审查
  9. LaTeX TeXworks编辑器插入.eps图片时,无法识别的扩展名eps
  10. 鸟哥的Linux私房菜(基础篇)- 第十六章、例行性工作排程 (crontab)