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.一定要注意对定义的参数进行初始化,否则可能会是意向不到的数,进而影响程序.

  • 相关阅读:
    SAP SD 模块面试题
    商品ATP check FM(获得可用库存和总库存)
    获得SO的凭证流
    SAP XI 常用事务代码
    ABAP 面试问题及答案(一)(转)
    ABAP 面试题(转)
    SAP XI 3.0考试大纲
    Enterprise System Applicaiton 试题
    Enterprise Portal 试题
    ABAP 100 道面试题
  • 原文地址:https://www.cnblogs.com/cj2014/p/5220617.html
Copyright © 2011-2022 走看看