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

posted on 2016-02-26 15:40  543680484  阅读(3680)  评论(0编辑  收藏  举报