精华内容
下载资源
问答
  • 1.Ctrl+R打开运行 2.输入 netsh winsock reset 3.运行上面命令 4.最后一步,重启

    1. Ctrl+R打开运行

    2. 输入

    netsh winsock reset

    3. 运行上面命令

    4. 最后一步,重启

    展开全文
  • 今天在做win32 API工程类型下的socket编程的时候,编译报错:unresolved external symbol __imp__WSAStartup@8 ,一查才知道是忘了初始化socket环境,在此记录下来,给自己一个提醒,也希望能给像我一样的socket...

    今天在做win32 API工程类型下的socket编程的时候,编译报错:unresolved external symbol __imp__WSAStartup@8 ,一查才知道是忘了初始化socket环境,在此记录下来,给自己一个提醒,也希望能给像我一样的socket新手一点帮助。

    解决整个问题的步骤如下:

    (1)修改工程设置:Project->Settings->Link  增加ws2_32.lib

    (2)包含头文件:include <WINSOCK2.h>

    (3)加载环境:

    BOOL InitSocketEnvironment()
    {
     WSADATA wsadata;
     if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)
     {
      return FALSE;
     }
     return TRUE;
    }

    这三步修改好后,程序运行通过。

    展开全文
  • socket属性设置与初始化操作

    千次阅读 2017-11-21 10:04:12
    socket属性设置与初始化操作 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

    展开全文
  • socket属性设置与初始化操作 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

    展开全文
  • 以上是我的测试代码,环境是wince(MC3090手持终端或该模拟器),当debug到s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)的时候,发现s对象实例出来的是一个不完整的对象,...
  • 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 = ...
  • PackageManagerService启动及初始化流程

    万次阅读 热门讨论 2013-10-23 09:32:38
    PackageManagerService也是有ServerThread启动的,运行在system_process进程。...PackageManagerService的启动需要四个参数,context上下文环境信息由ActivityManagerService获取,installer是一个安装器,是对install
  • Winsock 的初始化

    千次阅读 2012-10-16 10:26:49
    以下是一个使用上述知识初始化Winsock的一个例子(记得要引用Winsock的lib库). #include #include void main(void) {  WSADATA wsaData;    int Ret;  // Initialize Winsock ...
  • Socket

    千次阅读 2019-07-29 20:03:47
    TCP和UDP服务通常有一个客户和服务器的关系,而这个网络关系是依靠Socket进行连接和维持的。 Socket是一个软件结构,是指TCP/IP的API。Socket接口定义了许多函数和例程,可以用其来开打TCP/IP协议网络上的应用程序。...
  • Linux 网络初始化流程

    千次阅读 2012-10-03 18:29:59
    Linux 网络初始化流程 1.  系统初始化 (1)  X86 PC初始化过程 1)  CPU自身初始化 2)  BIOS加电自检POST 完成系统硬件的检测,包括内存检测、系统总线检测等 3)  BIOS加载内核主引导程序 MBR中...
  • 1.功能: windows下实现socket的简易服务器开发,...当然在进行socket编程时,要首先初始化socket环境 //初始化winsock环境 WSAData wsa_data; WORD ver =MAKEWORD(2, 2); if(WSAStartup(ver, &wsa_data) != 0) {
  • C++实现windows环境Socket TCP文件传输

    千次阅读 2019-07-02 17:12:42
    C++实现windows环境Socket TCP文件传输 server端: #include <stdio.h> #include <iostream> #include <cstring> #include <fstream> #include <winsock2.h> #pragma comment...
  • 1、WSAStartup()——初始化Socket 定义函数 int WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData ); 函数说明 WSAStartup,即WSA(Windows Sockets Asynchronous,Windows异步套接字)的启动...
  • dpdk 内存初始化

    千次阅读 2014-10-13 08:49:21
    负责执行DPDK库环境初始化,从进程attach到主进程初始化的DPDK上,主进程先mmap hugetlbfs 文件,构建内存管理相关结构 将这些结构存入hugetlbfs 上的配置文件rte_config,然后其他进程mmap rte_config文件,...
  • windows环境下用c++实现socket编程

    万次阅读 多人点赞 2017-02-27 16:29:42
    一、什么是Socket socket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),...
  • 1.Gatewayworker中,进行redis的初始化 在Gatewayworker中,进行redis的初始化,需要在Events::onWorkerStart中进行。 Events::onWorkerStart是每个进程生命周期内都只会触发一次,所以适合进行初始化的操作,包括...
  • 一个Redis服务器从启动到能够接受客户端的命令请求,需要经过一系列的初始化和设置过程,比如初始化服务器状态,接受用户指定的服务器配置,创建相应的数据结构和网络连接等等。通过分析main函数我们可以了解这些...
  • 端口初始化流程 1. 注册设备驱动到“dev_driver_list”链表中 2.扫描系统中的pci设备,并注册到“pci_device_list”中 3、初始化注册的驱动 4、网卡设备初始化 端口初始化流程 如上所示给出了端口打开的简单...
  • Property Service的启动与初始化init进程启动,分为两个阶段,阶段一主要是添加脚本执行环境,以及初始化必要的文件系统目录。接着通过execv来执行一个参数为--second-stage的新的init进程Image以取代之前的init进程...
  • socket

    千次阅读 2017-01-12 15:16:03
     服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器...
  • libvirt源码分析——libvirtd的初始化

    千次阅读 2016-04-08 14:53:38
    libvirtd的初始化在libvirtd.c中main函数里。 首先是分析命令行传进来的参数,常用的是libvirtd -d,即启动libvirtd守护进程。c = getopt_long(argc, argv, "ldf:p:t:vVh", opts, &optidx); case 'd': godaemon =...
  • 网络初始化函数调用顺序 《Linux系统启动那些事—基于Linux 3.10内核》提到系统启动时会调用一系列的初始化函数,初始化函数使用include/init.h中的宏定义,这些宏的顺序显示了初始化函数调用的顺序。即由pure_...
  • android系统启动时属性初始化过程

    千次阅读 2012-04-13 13:46:46
    所有属性可以通过getprop获取到,以下是属性初始化过程: 在init.c文件main函数中会调用start_property_service(),而它分别调用 load_properties_from_file函数读取PROP_PATH_SYSTEM_BUILD(/system/build.prop)...
  • windows环境下使用C++&Socket实现文件传输
  • Linux的SOCKET编程详解

    万次阅读 多人点赞 2012-04-10 17:44:52
    Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程...
  • 背景:一个刚开发完的小项目部署到测试环境,总是部署失败,直观的报错是error日志中有dubbo端口被占用。项目为springmvc框架+tomcat。 错误日志为: [0518 19:36:41 354 ERROR] [main] web.context....
  • c++ socket通信笔记

    千次阅读 2012-08-03 17:35:34
    总的来说网络程序是由两个部分组成的--客户端和服务器端.它们的建立步骤一般是:  服务器端 socket-->...在WINDOWS环境下使用SOCKET前需要初始化windows socket库,否则socket()会返回SOCKET_ERROR(-1) SO
  • 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,554
精华内容 14,621
关键字:

初始化socket环境失败