zoukankan      html  css  js  c++  java
  • socket的accept: Invalid argument问题

     1 void local_sdk_server::wait_remote_client_connect_and_comm()
     2 {
     3     /*服务器服务启动,等待客户端的链接的到来*/
     4     //sockaddr_in client_addr;
     5     sockaddr client_addr;
     6     socklen_t len;
     7     user users;//client
     8     string operation_key;
     9     string operation_value;
    10     ROS_INFO( "Watting connect......................." );
    11     len = 1;
    12     int accept_fd = accept( listen_fd, &client_addr, &len );
    13     if( accept_fd < 0 )
    14     {
    15         ROS_ERROR("errno is %s",strerror(errno));//strerror(errno)转换错误码为对应的错误信息
    16 ROS_ERROR("accept failed accept_fd is %d", accept_fd);
    17 }
    18 if( accept_fd >= 0 )//用户连接成功,返回的新的文件描述符 19 { 20 ROS_INFO( "accept_fd: %d", accept_fd );
    ...

    问题现象:

                server运行在accept函数处等待client的连接,当有client来连接时,accept函数返回值为-1(错误).

    问题解决:

                为知道是什么原因导致了accept返回失败,添加 ROS_ERROR("errno is %s",strerror(errno));(printf在此处打印不出来),打印出错误原因为Invalid argument(此时可以百度),即accept函数的参数无效,检查发现len只进行了定义socklen_t len,未进行初始化,对其初始化后问题解决.

    问题总结:

                1.在另外一辆IGV上没有出现上述问题,并不代表程序没有问题,往往是因为系统对未初始化的参数处理不同,所以运行结果可能是成功的.

                2.一定要注意对定义的参数进行初始化,否则可能会是意向不到的数,进而影响程序.

  • 相关阅读:
    16. Vue 登录存储
    JS 10位、13位时间戳转日期
    14.Vue 定义全局函数
    13.Vue+Element UI实现复制内容
    12.Vue+Element UI 获取input的值
    11.Vue安装Axios及使用
    Layui入手
    MongoDB自启动设置
    sql数据统计
    sql查询总结
  • 原文地址:https://www.cnblogs.com/cj2014/p/5220617.html
Copyright © 2011-2022 走看看