-
2019-04-28 12:08:01
1. Ctrl+R打开运行
2. 输入
netsh winsock reset
3. 运行上面命令
4. 最后一步,重启
更多相关内容 -
android 创建socket失败
2014-01-13 22:06:38manifest.xml中注册android.permission.INTERNET权限 注:在application标签外注册即可;manifest.xml中注册android.permission.INTERNET权限
<uses-permission android:name="android.permission.INTERNET"/>
注:在application标签外注册即可;
-
socket属性设置与初始化操作
2017-11-21 10:04:12socket属性设置与初始化操作 libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,...socket属性设置与初始化操作
libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。
event_base
在使用Libevent之前,需要初始化一个event_base结构。每一个event_base结构提包含了events集合并选择事件类型。如果选择locking方式,会保证交互是线程安全的。如果需要使用多线程模型的话,需要为每一个线程建立一个event_base。
method种类
select、poll、epoll、kqueue、devpoll、evport、win32
接口
#include <event2/event.h> struct event_base *event_base_new(void);
`event_base_new`会根据默认的配置参数返回一个`event_base`结构体,失败返回`NULL`。
配置方法
struct event_config *event_config_new(void); struct event_base *event_base_new_with_config(const struct event_config *cfg); void event_config_free(struct event_config *cfg);
`event_config_new`可以返回一个配置信息的结构体,通过修改结构提内容,并作为参数传递给`event_base_new_with_config`可以生成目标`event_base`,而`event_config_free`使用来是放掉config配置信息的。
那么event_config到底是什么样的?
struct event_config { TAILQ_HEAD(event_configq, event_config_entry) entries; int n_cpus_hint; //cpu数量 enum event_method_feature require_features;//指定IO复用的条件 enum event_base_config_flag flags; };
可以使用`event_config_set_num_cpus_hint(struct event_config *cfg, int cpus)`设置`n_cpu_hint`,但是目前只支持使用IOCP的情况下。
`require_features`的具体结构如下:
//event.h文件 enum event_method_feature { //支持边沿触发 EV_FEATURE_ET = 0x01, //添加、删除、或者确定哪个事件激活这些动作的时间复杂度都为O(1) //select、poll是不能满足这个特征的.epoll则满足 EV_FEATURE_O1 = 0x02, //支持任意的文件描述符,而不能仅仅支持套接字 EV_FEATURE_FDS = 0x04 };
通过`event_config_require_features(struct event_config *cfg, int features)`函数来设置`require_features`。
需要注意的是,当需要设置多个参数的时候需要使用 `EV_FEATURE_O1 | EV_FEATURE_FDS`操作,而不是多次调用该函数。如果设置不当,找不当对应的事件方法method,`event_base_new_with_config(cfg)会返回NULL`。
最后一个参数`flag`指定其他的配置:
enum event_base_config_flag { //不分配锁(如果设置,保证线程安全) EVENT_BASE_FLAG_NOLOCK = 0x01, //不检测EVENT_*环境变量? EVENT_BASE_FLAG_IGNORE_ENV = 0x02, //win下的iocp EVENT_BASE_FLAG_STARTUP_IOCP = 0x04, //? EVENT_BASE_FLAG_NO_CACHE_TIME = 0x08, //如果决定使用epoll这个多路IO复用函数,可以安全地使用更快的基于 changelist 的多路IO复用函数 EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST = 0x10, //? EVENT_BASE_FLAG_PRECISE_TIMER = 0x20 };
通过`event_config_set_flag(struct event_config *cfg, enum event_base_config_flag flag)`进行设置。
获取支持的配置
//获取当前系统支持的IO复用方法 const char **event_get_supported_methods(void); //获取配置的IO复用方法 const char *event_base_get_method(const struct event_base *); int event_base_get_features(const struct event_base *base); //指明某个参数是否被禁用 static int event_config_is_avoided_method(const struct event_config *cfg, const char *method)
设置IO优先级
默认情况下会设置相同的优先级。
int event_base_priority_init(struct event_base *base, int n_priorities); int event_base_get_npriorities(struct event_base *base);
fork使用parent进程中的event_base
int event_reinit(struct event_base *base); #include <event2/event.h> /* example */ struct event_base *base = event_base_new(); /* ... add some events to the event_base ... */ if (fork()) { /* In parent */ continue_running_parent(base); /*...*/ } else { /* In child */ event_reinit(base); continue_running_child(base); /*...*/ }
libevent 函数
考虑到多个平台的兼容性(并不是所有平台都支持某一函数功能),`libevent`自身提供了很多函数以及数据类型,下面的函数均是是跨平台的,在Unix以及windows都可以正常运行。
定时函数
#define evutil_timeradd(tvp, uvp, vvp) /* 增加 vvp=tvp+uvp */ #define evutil_timersub(tvp, uvp, vvp) /* 减少 vvp=tvp-uvp */ #define evutil_timercmp(tvp, uvp, cmp) /* 比较 if (cmp=='<'), then ("tvp < uvp") */ int evutil_gettimeofday(struct timeval *tv, struct timezone *tz); /* Set tv = now */ evutil_gettimeofday(&tv, NULL);
struct timeval tv1, tv2, tv3; /* Set tv1 = 5.5 seconds */ tv1.tv_sec = 5; tv1.tv_usec = 500*1000; /* Set tv2 = now */ evutil_gettimeofday(&tv2, NULL); /* Set tv3 = 5.5 seconds in the future */ evutil_timeradd(&tv1, &tv2, &tv3); /* all 3 should print true */ if (evutil_timercmp(&tv1, &tv1, ==)) /* == "If tv1 == tv1" */ puts("5.5 sec == 5.5 sec"); if (evutil_timercmp(&tv3, &tv2, >=)) /* == "If tv3 >= tv2" */ puts("The future is after the present."); if (evutil_timercmp(&tv1, &tv2, <)) /* == "If tv1 < tv2" */ puts("It is no longer the past.")
兼容的Socket接口
关闭socket:在`unix`中,只需要调用`close()`,而在`windows`中需要调用`closesocket()`。
int evutil_closesocket(evutil_socket_t s); #define EVUTIL_CLOSESOCKET(s) evutil_closesocket(s)
获取socket错误信息
#define EVUTIL_SOCKET_ERROR() /* 获取最新的全局错误信息 */ #define EVUTIL_SET_SOCKET_ERROR(errcode) /* 改变错误信息,等于设置错误 */ #define evutil_socket_geterror(sock) /* 指定sockfd,同1 */ #define evutil_socket_error_to_string(errcode) /* 把errcode转换为字符串 */
设置非阻塞模式
int evutil_make_socket_nonblocking(evutil_socket_t sock);
地址重用
int evutil_make_listen_socket_reuseable(evutil_socket_t sock);
socketpair
该函数和unix中的socketpair一样,它会产生两个连接socket,一个用于输入,一个用于输出。注意,在windows中,只支持family=AF_INET,type=SOCK_STREAM,protocol=0。int evutil_socketpair(int family, int type, int protocol,evutil_socket_t sv[2]);
随机数生成
该函数生成n长度的buf数据
void evutil_secure_rng_get_bytes(void *buf, size_t n);
参考
http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html
http://www.tuicool.com/articles/jaQ7vmZ
本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012
-
金仓数据库KingbaseES初始化失败如何分析
2022-02-09 15:27:11一、KingbaseES Initdb初始化数据库过程 initdb 创建一个新的KingbaseES数据库集群。一个数据库集群是由单个服务器实例管理的多个数据库的集合。 创建数据库系统包括创建数据库数据的宿主目录,生成共享的系统表(不...一、KingbaseES Initdb初始化数据库过程
initdb 创建一个新的KingbaseES数据库集群。一个数据库集群是由单个服务器实例管理的多个数据库的集合。
创建数据库系统包括创建数据库数据的宿主目录,生成共享的系统表(不属于任何特定数据库的表)和创建 template1 和 TEST 数据库。当你以后再创建一个新数据库时,template1 数据库里所有内容都会拷贝过来。因此,任何在 template1 里面安装的东西都自动拷贝到之后创建的数据库中。TEST 数据库是一个缺省数据库,用于给用户、工具、第三方应用提供缺省数据库。
尽管 initdb 会尝试创建相应的数据目录,但经常会没有权限做这件事。因为所要创建目录的父目录通常被 root 所拥有。要初始化这种设置,用 root 创建一个空数据目录,然后用 chown 把该目录的所有权交给数据库用户帐号,然后 su 成数据库用户,最后以数据库用户身份运行 initdb 。
initdb 必须以运行数据库服务器的用户身份运行,因为服务器需要访问 initdb 创建的目录和文件。因为服务器通常是以非 root 身份运行的,因此一般也就不以 root 用户运行 initdb ,事实上 initdb 将拒绝你以 root 用户运行它。
initdb 初始化该数据库集群的缺省区域和字符集编码。字符编码排序(LC_COLLATE)和字符集类(LC_CTYPE 也就是大写、小写、数字等)是对所有数据库估定的,不能改变。使用 C 或 POSIX 之外的字符编码排序还会有性能影响。因此在运行 initdb 的时候就做出正确的选择是非常重要的。其它区域范畴可以在随后启动服务器的时候改变。所有服务器区域值(lc_*)都可以用 SHOW ALL 显示。二、Initdb初始化帮助信息
[kingbase@node1 bin]$ ./initdb --help
initdb initializes a Kingbase database cluster.Usage:
initdb [OPTION]… [DATADIR]Options:
-A, --auth=METHOD default authentication method for local connections
–auth-host=METHOD default authentication method for local TCP/IP connections
–auth-local=METHOD default authentication method for local-socket connections
[-D, --kingbase_data=]DATADIR location for this database cluster
-E, --encoding=ENCODING set default encoding for new databases
-g, --allow-group-access allow group read/execute on data directory
–locale=LOCALE set default locale for new databases
–lc-collate=, --lc-ctype=, --lc-messages=LOCALE
–lc-monetary=, --lc-numeric=, --lc-time=LOCALE
set default locale in the respective category for
new databases (default taken from environment)
–no-locale equivalent to --locale=C
–pwfile=FILE read password for the new superuser from file
-T, --text-search-config=CFG
default text search configuration
-U, --username=NAME database superuser name
-W, --pwprompt prompt for a password for the new superuser
-X, --waldir=WALDIR location for the write-ahead log directory
–wal-segsize=SIZE size of WAL segments, in megabytes
-m, --dbmode=MODE set database mode(default value is oracle)
-e, --encrypt-algorithm Specify encryption method
-t, --aud-tblspc-enc enable sysaudit tablespace encrypt
-K, --enckey=KEY Specify sysaudit tablesapace encrypt key
-M, --passwordcheck enable user password check for initdb
-I, --identity-pwdexp enable user password expire check
–case-insensitive initialize database cluster with case-insensitive
–block-size=SIZE set table block size in kB [8]Less commonly used options:
-d, --debug generate lots of debugging output
-k, --data-checksums use data page checksums
-L DIRECTORY where to find the input files
-n, --no-clean do not clean up after errors
-N, --no-sync do not wait for changes to be written safely to disk
-s, --show show internal settings
-S, --sync-only only sync data directoryOther options:
-V, --version output version information, then exit
-?, --help show this help, then exitIf the data directory is not specified, the environment variable KINGBASE_DATA
is used.Report bugs to kingbase-bugs@kingbase.com.cn.
[kingbase@node1 bin]$三、initdb初始化数据库案例
3.1 案例一:数据库data目录权限问题
1) 案例现象
在通过initdb初始化数据库时,提示数据库数据存储目录data目录没有权限访问。
[kingbase@node1 bin]$ ./initdb -D /data/kingbase/v8r6/data/ -m pgThe files belonging to this database system will be owned by user “kingbase”.
This user must also own the server process.The database cluster will be initialized with locale “en_US.UTF-8”.
The default database encoding has accordingly been set to “UTF8”.
The default text search configuration will be set to “english”.The comparision of strings is case-sensitive.
Data page checksums are disabled.fixing permissions on existing directory /data/kingbase/v8r6/data … initdb: error: could not change permissions of directory “/data/kingbase/v8r6/data”: Operation not permitted
2) 案例分析
查看数据库数据存储目录权限如下图3-1所示,data目录的所有者为root所有,kingbase用户无权限写入访问。图3-1 查看data目录权限
3) 故障解决
将data目录的所有者改为kingbase用户,重新执行初始化即可。
3.2 案例二:数据库初始化字符集问题
1)案例说明
在执行initdb时,-E参数指定数据库字符集,初始化失败。
[kingbase@node1 bin]$ ./initdb -D /data/kingbase/v8r6/data -E GBK -U system -WThe files belonging to this database system will be owned by user “kingbase”.
This user must also own the server process.The database cluster will be initialized with locale “en_US.UTF-8”.
initdb: error: "GBK " is not a valid server encoding name2) 案例分析
通过错误日志可知,操作系统的locale配置为"en_US.UTF-8",需要初始化的字符集为”GBK”,与系统环境不匹配。
查看系统locale:图3-2 系统locale信息
修改系统locale:图3-3 配置系统locale
3) 故障解决
修改系统locale后,重新初始化数据库即可。图3-4 initdb初始化数据库
四、总结
对于initdb初始化数据库问题,可以通过错误日志的信息,进行分析,结合系统配置来解决初始化的故障。
参考文档:
《基于Linux系统的数据库软件安装指南》 -
k8s 重启策略、健康检查、环境变量、初始化容器
2021-12-23 10:31:59k8s 重启策略、健康检查、环境变量、初始化容器Pod基本概念Pod特点Pod存在意义Pod资源共享实现机制重启策略健康检查环境变量init Container(初始化容器)haproxy Pod基本概念 Pod是Kubernetes创建和管理的最小单元,... -
netty源码学习之服务端客户端初始化
2021-09-25 17:04:53//如果异步结果中有异常则直接返回 此时:netty服务端初始化失败 if (regFuture.cause() != null) { return regFuture; } final ChannelPromise promise; //上述的initAndRegister的结果是异步通知的 所有此处需要... -
linux网络socket
2022-03-10 21:04:37文章目录理解源ip地址和目的ip地址端口号端口号和pid套接字网络字节序socket编程接口sockaddr结构 理解源ip地址和目的ip地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址 ip地址可以确定唯一一... -
k8s pod生命周期、初始化容器、钩子函数、容器探测、重启策略
2021-12-07 11:43:12运行初始化容器(init container)过程 运行主容器(main container) 容器启动后钩子(post start)、容器终止前钩子(pre stop) 容器的存活性探测(liveness probe)、就绪性探测(readiness probe) pod终止... -
vc socket编程中,winsock2环境初始化问题。
2007-10-12 16:24:00今天在做win32 API工程类型下的socket编程的时候,编译报错:unresolved external symbol __imp__WSAStartup@8 ,一查才知道是忘了初始化socket环境,在此记录下来,给自己一个提醒,也希望能给像我一样的socket... -
在Tomcat环境下使用socket通信
2021-03-05 11:12:48具体的系统拓扑如下: 为了完成以上的需求,一般的解决方案有两种:自己实现服务器端程序,利用已经实现的http jar包来实现http通信协议,同时利用socket通信来实现自己的通信协议;将socket通信整合在tomcat中,... -
k8s(二)—pod生命周期(init初始化容器、存活探针、就绪探针)
2022-03-19 16:23:39pause容器提供pod最底层的环境,来做容器的环境初始化 初始化容器必须按照顺序执行,第一个启动成功后退出,第二个才能运行 -
Winsock的初始化
2017-05-07 07:27:47以下是一个使用上述知识初始化Winsock的一个例子(记得要引用Winsock的lib库). #include #include void main(void) { WSADATA wsaData; int Ret; // Initialize Winsock version 2.2 if ((Ret = ... -
重装新版gitlab时遇到gitlab-rails database初始化失败
2020-12-21 09:47:17环境说明Centos7: 3.10.0-327.el7.x86_64gitlab版本:原来是8.8.5版本问题发生的原因:在同一台Centos7机器上卸载了旧版本的gitlab后,接着又重新安装新版本的gitlab-ce 在安装完后修改配置,初始... -
HttpClients初始化配置说明
2019-05-10 11:34:41Manager: 管理器,让对象执行核心功能,而对象本身则被Manager托管,比如生成、初始化、池化等 Provider:某种对象的提供者 Operator:执行者 Resolver:某种信息的提供者 Registry:本质上是一个Map, 用于注册... -
socket学习01(socket函数参数介绍)
2022-01-23 12:35:56socket套接字函数接口参数: 1.SOCKET sock = socket(int af, int type, int protocol); (1)af 为地址族(Address Family),IP 地址类型,常用的有 AF_INET 和 AF_INET6。AF_INET 表示 IPv4 地址,例如 127.0.0.1... -
C++实现windows环境下Socket TCP文件传输
2019-07-02 17:12:42C++实现windows环境下Socket TCP文件传输 server端: #include <stdio.h> #include <iostream> #include <cstring> #include <fstream> #include <winsock2.h> #pragma comment... -
Windows Socket1.1 程序设计.docx
2022-06-14 15:23:16Windows Socket1.1 程序设计 -
# Socket基础一:获取主机IP地址
2020-04-25 21:13:14Windows Sockets是Windows环境下的网络编程接口,最初源于UNIX环境下的BSD Socket,是一个与网络协议无关的编程接口。 Windows 套接字为程序员提供了一套简单的API,Windows Sockets定义了程序员能够使用并且网... -
libevent(一) socket属性设置与初始化操作
2015-07-12 19:44:11socket属性设置与初始化操作 libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,... -
W5500开发笔记 | 01- W5500 Socket API的说明
2021-05-15 15:29:051. 硬件环境 W5500驱动教程请参考: STM32CubeMX | 38-使用硬件SPI驱动以太网模块(W5500) 本系列教程中对W5500模块和开发板之间的连接方式如图: 引脚连接情况为: W5500引脚 STM32引脚 3V3 3V3 GND ... -
复现socket error 10054及理解
2021-05-28 16:54:13if (SockServer == INVALID_SOCKET) { printf("socket初始化失败!\n"); closesocket(SockServer); WSACleanup(); return -1; } if (bind(SockServer, (sockaddr*)&AddrClient, sizeof(AddrClient)) !=... -
windows环境下用c++实现socket编程
2017-02-27 16:29:42一、什么是Socket socket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),... -
Java实现Socket通信
2021-06-04 17:28:301. 开发环境 操作系统:win10 Java版本:1.8 开发工具:IDEA 2021 2. 项目描述 本项目基于TCP协议,实现了客户端和服务器的Socket通信。项目主要实现了查字的功能,客户端输入要查询的一个汉字,然后回车发送到... -
wince平台下 初始话Socket对象时,不成功?
2016-07-25 10:00:31以上是我的测试代码,环境是wince(MC3090手持终端或该模拟器),当debug到s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)的时候,发现s对象实例化出来的是一个不完整的对象,... -
Socket
2019-07-29 20:03:47TCP和UDP服务通常有一个客户和服务器的关系,而这个网络关系是依靠Socket进行连接和维持的。 Socket是一个软件结构,是指TCP/IP的API。Socket接口定义了许多函数和例程,可以用其来开打TCP/IP协议网络上的应用程序。... -
[Spring 深度解析]第7章 IoC容器的初始化过程
2020-12-23 00:39:08 前面已经给大家介绍了网站处理请求时所涉及的各种协议和实现方法,不过之前的实现只是为了让大家明白原理而设计的简单示例程序,本章分析一个实际环境中经常使用的具体的实现——Tomcat。 7.1 Tomcat的顶层结构... -
1. Windows网络编程(C++ Socket编程)
2021-02-12 19:52:04Windows网络编程(C++ Socket编程) 文章目录Windows网络编程(C++ Socket编程)基于TCP/IP协议的C/S模型服务端1. 打开网络库2. 校验版本3. 创建一个socket4. 绑定地址与端口5. listen监听网络端口6. accept等待客户端... -
LINUX环境下websocket连接拔网线后socketfd未被释放的问题
2022-04-07 11:07:26websocket连接拔网线后socketfd未被释放 使用int shutdown(int sockfd,int howto) 接口解决问题 -
来吧展示!以太网配合FreeRTOS实现socket通信!实战STM32F4以太网DP83848配合LWIP
2021-04-30 15:30:18目的:实现STM32F407+FreeRTOS+Ethernet(DP83848)+Lwip实现socket通信,在实现之前我们先来了解下几点储备知识 一. 以太网行业标准MII/RMII 1 以太网接口MII,RMII MII即“媒体独立接口”,也叫“独立于介质的... -
多线程socket服务器(c语言)
2021-11-30 09:10:27文章目录一.线程的基本概念二,进程与线程的关系和区别三....但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)