Linux/Windows socket 单进程创建socket的最大数量

windows Linux 创建socket 

1、引用的头文件不同

2、关闭socket方式不同

3、Linux 创建socket 不需要初始化环境

 

如下代码是兼容的方式创建socket示例

#ifdef _WIN32
#include <Windows.h>
#pragma comment(lib, "ws2_32.lib")
#else 
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#define IPPROTO_IP 0
#define INVALID_SOCKET -1
#endif // _WIN32

#include <stdio.h>

int main(int argc, char* argv[]) {

#ifdef _WIN32
	WSADATA wsaData;
	int err;
	err = WSAStartup(MAKEWORD(2,2), &wsaData);
	if (err != 0) {
		printf("WSAStartup failed with error: %d\n", err);
		return -1;
	}
	if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		printf("Could not find a usable version of Winsock.dll\n");
		WSACleanup();
		return -1;
	}
#endif // _WIN32
	int s;
	for (int i = 0; i < 1024; i++)
	{
		s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
		if (s == INVALID_SOCKET) {
			printf("socket function failed with error = %d\n");
			return -1;
		}
		printf("socket function success %d\n",s);
#ifdef _WIN32
		closesocket(s);
#else
		close(s);
#endif // _WIN32
	}
#ifdef _WIN32
	WSACleanup();
#endif // _WIN32

	getchar();
}

Linux中一切资源皆文件,创建一个socket资源相当于一个文件句柄,默认一个线程创建的最大创建文件的数量为1024 

QQ截图20190403142125.png

Linux下创建的文件句柄是从3开始的 0和1都被标准输入输出占用

如果不关闭创建的文件资源,那么它在创建第1024个socket资源的时候就会失败 

0.png

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《Linux/Windows socket 单进程创建socket的最大数量

郑重声明:本文只做技术交流学习使用,请尊重当地法规法律,勿对企业或个人网站及app进行破坏。如产生连带法律责任 123``blog 作者本人概不负责。

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)