【socket】Linux 实验调试问题记录

记录贴

1.Linux 下socket返回值总为-1

sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);  
    if (sockfd < 0)  
    {  
        printf("ip:%s,socket error
",ips);  
        return ERROR;  
    }  

经过查资料:

  • 创建原始套接字具体格式如下:

    int sockfd;sockfd = socktet(AF_INET, SOCK_RAW, IPPROTO_ICMP);
    
    • 第一个参数:协议族 AF_INET 代表TCP/IP协议
    • 第二个参数:SOCKET类型
    • 第三个参数:协议类型注意:@如果指定协议为0时,原始套接字(SOCK_RAW)可以接收内核传递给原始套接字的任何IP数据包,且只有超级用户才可以创建原始套接字。即在root权限下运行

2.implicit declaration of function ‘memset’ /include ‘<string.h>’ or provide a declaration of ‘memset’

  • memset函数原型:void *memset(void *s, int c, size_t n);

  • 函数可以给任意类型数数组赋0,但注意

    • 第一个参数为void类型指针,需要进行强制转换

    • 包含头文件<string.h>

3.-lsocket

这个编译选项现在已经默认包含这个库,不用手动连接,直接编译即可。

4.ifconfig查看网卡信息命令用不了

  • 首先可以试一下使用root权限:sudo ifconfig
  • 如果不行apt install net-tools进行安装,然后再用上面的命令

5.icotl 函数设置接口标志 error:con‘t get flags:no such device

一般是网卡的名称搞错了,可以用命令ip addr或者ifconfig查看网卡信息

原文地址:https://www.cnblogs.com/wwj321/p/12638994.html