getsockopt/setsockopt 函数说明 .

【 getsockopt/setsockopt系统调用】  
   
功能描述:
获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。


用法:
int setsockopt(
  __in          SOCKET        s,
  __in          int                level,
  __in          int                optname,
  __in          const char* optval,
  __in          int               optlen
);

int getsockopt(
  __in          SOCKET   s,
  __in          int           level,
  __in          int           optname,
  __out        char*     optval,
  __in_out    int*       optlen
);

参数:  
sock:将要被设置或者获取选项的套接字。
level:选项所在的协议层。
optname:需要访问的选项名。


optval:对于getsockopt(),指向返回选项值的缓冲。

             对于setsockopt(),指向包含新选项值的缓冲。


optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。

              对于setsockopt(),The size, in bytes, of the optval buffer. 

 

level指定控制套接字的层次.可以取三种值:
     1)SOL_SOCKET:通用套接字选项.
     2)IPPROTO_IP:IP选项.
     3)IPPROTO_TCP:TCP选项. 


optname指定控制的方式(选项的名称),我们下面详细解释 

optval获得或者是设置套接字选项.根据选项名称的数据类型进行转换 


选项名称        说明                  数据类型
========================================================================
            SOL_SOCKET
------------------------------------------------------------------------
SO_BROADCAST     允许发送广播数据            int
SO_DEBUG          允许调试                int
SO_DONTROUTE     不查找路由               int
SO_ERROR        获得套接字错误             int
SO_KEEPALIVE        保持连接                int
SO_LINGER         延迟关闭连接              struct linger
SO_OOBINLINE      带外数据放入正常数据流         int
SO_RCVBUF         接收缓冲区大小             int
SO_SNDBUF        发送缓冲区大小             int
SO_RCVLOWAT       接收缓冲区下限             int
SO_SNDLOWAT       发送缓冲区下限             int
SO_RCVTIMEO       接收超时                struct timeval
SO_SNDTIMEO       发送超时                struct timeval
SO_REUSERADDR      允许重用本地地址和端口         int
SO_TYPE              获得套接字类型             int
SO_BSDCOMPAT      与BSD系统兼容              int
========================================================================
            IPPROTO_IP
------------------------------------------------------------------------
IP_HDRINCL       在数据包中包含IP首部          int
IP_OPTINOS       IP首部选项               int
IP_TOS           服务类型
IP_TTL            生存时间                int
========================================================================
            IPPRO_TCP
------------------------------------------------------------------------
TCP_MAXSEG       TCP最大数据段的大小           int
TCP_NODELAY       不使用Nagle算法             int
========================================================================

返回说明:  
成功执行时,返回0。失败返回-1,errno被设为以下的某个值  
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字

SO_RCVBUF和SO_SNDBUF每个套接口都有一个发送缓冲区和一个接收缓冲区,使用这两个套接口选项可以改变缺省缓冲区大小。

// 接收缓冲区
int nRecvBuf=32*1024;         //设置为32K
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));


//发送缓冲区
int nSendBuf=32*1024;//设置为32K
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

注意:

当设置TCP套接口接收缓冲区的大小时,函数调用顺序是很重要的,因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客户,SO_RCVBUF选项必须在connect之前设置;对于服务器,SO_RCVBUF选项必须在listen前设置。

 

原文见:http://blog.youkuaiyun.com/xioahw/archive/2009/04/08/4056514.aspx

CANopenLinux/CO_error.h:103:21: error: field ‘timestamp’ has incomplete type 103 | struct timespec timestamp; /**< listen only mode started at this time */ | ^~~~~~~~~ CANopenLinux/CO_driver.c:40:1: error: unknown type name ‘pthread_mutex_t’ 40 | pthread_mutex_t CO_EMCY_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~ CANopenLinux/CO_dCANopenLinux/CO_error.h:103:21: error: field ‘timestamp’ has incomplete type 103 | struct timespec timestamp; /**< listen only mode started at this time */ | ^~~~~~~~~ CANopenLinux/CO_driver.c:40:1: error: unknown type name ‘pthread_mutex_t’ 40 | pthread_mutex_t CO_EMCY_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:40:33: error: ‘PTHREAD_MUTEX_INITIALIZER’ undeclared here (not in a function) 40 | pthread_mutex_t CO_EMCY_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:41:1: error: unknown type name ‘pthread_mutex_t’ 41 | pthread_mutex_t CO_OD_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c: In function ‘disableRx’: CANopenLinux/CO_driver.c:95:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 95 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:96:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 96 | int ret = setsockopt(CANmodule->CANinterfaces[i].fd, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); | ^~ CANopenLinux/CO_driver.c:98:61: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 98 | log_printf(LOG_ERR, CAN_FILTER_FAILED, CANmodule->CANinterfaces[i].ifName); | ^~ CANopenLinux/CO_driver.c: In function ‘setRxFilters’: CANopenLinux/CO_driver.c:119:23: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 119 | if ((CANmodule->rxFilter[i].can_id != 0) || (CANmodule->rxFilter[i].can_mask != 0)) { | ^~ CANopenLinux/CO_driver.c:119:63: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 119 | if ((CANmodule->rxFilter[i].can_id != 0) || (CANmodule->rxFilter[i].can_mask != 0)) { | ^~ CANopenLinux/CO_driver.c:121:44: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 121 | rxFiltersCpy[count] = CANmodule->rxFilter[i]; | ^~ CANopenLinux/CO_driver.c:133:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 133 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:134:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 134 | int ret = setsockopt(CANmodule->CANinterfaces[i].fd, SOL_CAN_RAW, CAN_RAW_FILTER, rxFiltersCpy, | ^~ CANopenLinux/CO_driver.c:137:61: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 137 | log_printf(LOG_ERR, CAN_FILTER_FAILED, CANmodule->CANinterfaces[i].ifName); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_init’: CANopenLinux/CO_driver.c:178:5: error: unknown type name ‘CO_CANptrSocketCan_t’ 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:178:41: error: ‘CO_CANptrSocketCan_t’ undeclared (first use in this function) 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:178:41: note: each undeclared identifier is reported only once for each function it appears in CANopenLinux/CO_driver.c:178:62: error: expected expression before ‘)’ token 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^ CANopenLinux/CO_driver.c:181:14: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 181 | CANmodule->epoll_fd = CANptrReal->epoll_fd; | ^~ CANopenLinux/CO_driver.c:181:37: error: request for member ‘epoll_fd’ in something not a structure or union 181 | CANmodule->epoll_fd = CANptrReal->epoll_fd; | ^~ CANopenLinux/CO_driver.c:182:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 182 | CANmodule->CANinterfaces = NULL; | ^~ CANopenLinux/CO_driver.c:183:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 183 | CANmodule->CANinterfaceCount = 0; | ^~ CANopenLinux/CO_driver.c:201:14: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 201 | CANmodule->rxFilter = calloc(CANmodule->rxSize, sizeof(struct can_filter)); | ^~ CANopenLinux/CO_driver.c:202:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 202 | if (CANmodule->rxFilter == NULL) { | ^~ CANopenLinux/CO_driver.c:209:27: warning: conversion from ‘unsigned int’ to ‘uint16_t’ {aka ‘short unsigned int’} changes value from ‘4294967295’ to ‘65535’ [-Woverflow] 209 | rxArray[i].mask = 0xFFFFFFFFU; | ^~~~~~~~~~~ CANopenLinux/CO_driver.c:212:19: error: ‘CO_CANrx_t’ has no member named ‘can_ifindex’ 212 | rxArray[i].can_ifindex = 0; | ^ CANopenLinux/CO_driver.c:213:19: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 213 | rxArray[i].timestamp.tv_sec = 0; | ^ CANopenLinux/CO_driver.c:214:19: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 214 | rxArray[i].timestamp.tv_nsec = 0; | ^ CANopenLinux/CO_driver.c:219:58: error: request for member ‘can_ifindex’ in something not a structure or union 219 | ret = CO_CANmodule_addInterface(CANmodule, CANptrReal->can_ifindex); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_addInterface’: CANopenLinux/CO_driver.c:239:5: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 239 | CO_CANinterface_t* interface; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:241:12: error: variable ‘ev’ has initializer but incomplete type 241 | struct epoll_event ev = {0}; | ^~~~~~~~~~~ CANopenLinux/CO_driver.c:241:30: warning: excess elements in struct initializer 241 | struct epoll_event ev = {0}; | ^ CANopenLinux/CO_driver.c:241:30: note: (near initialization for ‘ev’) CANopenLinux/CO_driver.c:241:24: error: storage size of ‘ev’ isn’t known 241 | struct epoll_event ev = {0}; | ^~ CANopenLinux/CO_driver.c:252:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 252 | CANmodule->CANinterfaceCount++; | ^~ CANopenLinux/CO_driver.c:253:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 253 | CANmodule->CANinterfaces = realloc(CANmodule->CANinterfaces, | ^~ CANopenLinux/CO_driver.c:253:49: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 253 | CANmodule->CANinterfaces = realloc(CANmodule->CANinterfaces, | ^~ CANopenLinux/CO_driver.c:254:51: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 254 | ((CANmodule->CANinterfaceCount) * sizeof(*CANmodule->CANinterfaces))); | ^~ CANopenLinux/CO_driver.c:254:91: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 254 | ((CANmodule->CANinterfaceCount) * sizeof(*CANmodule->CANinterfaces))); | ^~ CANopenLinux/CO_driver.c:255:18: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 255 | if (CANmodule->CANinterfaces == NULL) { | ^~ CANopenLinux/CO_driver.c:259:27: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 259 | interface = &CANmodule->CANinterfaces[CANmodule->CANinterfaceCount - 1]; | ^~ CANopenLinux/CO_driver.c:259:52: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 259 | interface = &CANmodule->CANinterfaces[CANmodule->CANinterfaceCount - 1]; | ^~ CANopenLinux/CO_driver.c:261:14: error: request for member ‘can_ifindex’ in something not a structure or union 261 | interface->can_ifindex = can_ifindex; | ^~ CANopenLinux/CO_driver.c:262:51: error: request for member ‘ifName’ in something not a structure or union 262 | ifName = if_indextoname(can_ifindex, interface->ifName); | ^~ CANopenLinux/CO_driver.c:269:14: error: request for member ‘fd’ in something not a structure or union 269 | interface->fd = socket(PF_CAN, SOCK_RAW, CAN_RAW); | ^~ CANopenLinux/CO_driver.c:270:18: error: request for member ‘fd’ in something not a structure or union 270 | if (interface->fd < 0) { | ^~ CANopenLinux/CO_driver.c:277:31: error: request for member ‘fd’ in something not a structure or union 277 | ret = setsockopt(interface->fd, SOL_SOCKET, SO_RXQ_OVFL, &tmp, sizeof(tmp)); | ^~ CANopenLinux/CO_driver.c:285:31: error: request for member ‘fd’ in something not a structure or union 285 | ret = setsockopt(interface->fd, SOL_SOCKET, SO_TIMESTAMPING, &tmp, sizeof(tmp)); | ^~ CANopenLinux/CO_driver.c:298:25: error: request for member ‘fd’ in something not a structure or union 298 | getsockopt(interface->fd, SOL_SOCKET, SO_RCVBUF, (void*)&bytes, &sLen); | ^~ CANopenLinux/CO_driver.c:300:60: error: request for member ‘ifName’ in something not a structure or union 300 | log_printf(LOG_INFO, CAN_SOCKET_BUF_SIZE, interface->ifName, bytes / 446, bytes); | ^~ CANopenLinux/CO_driver.c:307:25: error: request for member ‘fd’ in something not a structure or union 307 | ret = bind(interface->fd, (struct sockaddr*)&sockAddr, sizeof(sockAddr)); | ^~ CANopenLinux/CO_driver.c:309:58: error: request for member ‘ifName’ in something not a structure or union 309 | log_printf(LOG_ERR, CAN_BINDING_FAILED, interface->ifName); | ^~ CANopenLinux/CO_driver.c:331:17: error: ‘EPOLLIN’ undeclared (first use in this function) 331 | ev.events = EPOLLIN; | ^~~~~~~ CANopenLinux/CO_driver.c:332:27: error: request for member ‘fd’ in something not a structure or union 332 | ev.data.fd = interface->fd; | ^~ CANopenLinux/CO_driver.c:333:11: warning: implicit declaration of function ‘epoll_ctl’ [-Wimplicit-function-declaration] 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~~~~~~~~ CANopenLinux/CO_driver.c:333:30: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~ CANopenLinux/CO_driver.c:333:42: error: ‘EPOLL_CTL_ADD’ undeclared (first use in this function) 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~~~~~~~~~~~~ CANopenLinux/CO_driver.c:241:24: warning: unused variable ‘ev’ [-Wunused-variable] 241 | struct epoll_event ev = {0}; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_disable’: CANopenLinux/CO_driver.c:356:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 356 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:357:9: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 357 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[i]; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:357:50: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 357 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[i]; | ^~ CANopenLinux/CO_driver.c:363:28: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~ CANopenLinux/CO_driver.c:363:40: error: ‘EPOLL_CTL_DEL’ undeclared (first use in this function) 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~~~~~~~~~~~~ CANopenLinux/CO_driver.c:363:64: error: request for member ‘fd’ in something not a structure or union 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~ CANopenLinux/CO_driver.c:364:24: error: request for member ‘fd’ in something not a structure or union 364 | close(interface->fd); | ^~ CANopenLinux/CO_driver.c:365:18: error: request for member ‘fd’ in something not a structure or union 365 | interface->fd = -1; | ^~ CANopenLinux/CO_driver.c:367:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 367 | CANmodule->CANinterfaceCount = 0; | ^~ CANopenLinux/CO_driver.c:368:18: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 368 | if (CANmodule->CANinterfaces != NULL) { | ^~ CANopenLinux/CO_driver.c:369:23: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 369 | free(CANmodule->CANinterfaces); | ^~ CANopenLinux/CO_driver.c:371:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 371 | CANmodule->CANinterfaces = NULL; | ^~ CANopenLinux/CO_driver.c:373:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 373 | if (CANmodule->rxFilter != NULL) { | ^~ CANopenLinux/CO_driver.c:374:23: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 374 | free(CANmodule->rxFilter); | ^~ CANopenLinux/CO_driver.c:376:14: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 376 | CANmodule->rxFilter = NULL; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANrxBufferInit’: CANopenLinux/CO_driver.c:397:15: error: ‘CO_CANrx_t’ has no member named ‘can_ifindex’ 397 | buffer->can_ifindex = 0; | ^~ CANopenLinux/CO_driver.c:398:15: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 398 | buffer->timestamp.tv_nsec = 0; | ^~ CANopenLinux/CO_driver.c:399:15: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 399 | buffer->timestamp.tv_sec = 0; | ^~ CANopenLinux/CO_driver.c:409:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 409 | CANmodule->rxFilter[index].can_id = buffer->ident; | ^~ CANopenLinux/CO_driver.c:410:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 410 | CANmodule->rxFilter[index].can_mask = buffer->mask; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANtxBufferInit’: CANopenLinux/CO_driver.c:467:15: error: ‘CO_CANtx_t’ has no member named ‘can_ifindex’ 467 | buffer->can_ifindex = 0; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANsend’: CANopenLinux/CO_driver.c:631:57: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 631 | if (CANmodule == NULL || buffer == NULL || CANmodule->CANinterfaceCount == 0) { | ^~ CANopenLinux/CO_driver.c:635:5: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 635 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[0]; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:635:46: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 635 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[0]; | ^~ CANopenLinux/CO_driver.c:636:39: error: request for member ‘fd’ in something not a structure or union 636 | if (interface == NULL || interface->fd < 0) { | ^~ CANopenLinux/CO_driver.c:645:72: error: request for member ‘ifName’ in something not a structure or union 645 | log_printf(LOG_ERR, DBG_CAN_TX_FAILED, buffer->ident, interface->ifName); | ^~ CANopenLinux/CO_driver.c:650:31: error: request for member ‘fd’ in something not a structure or union 650 | ssize_t n = send(interface->fd, buffer, CAN_MTU, MSG_DONTWAIT); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_process’: CANopenLinux/CO_driver.c:686:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 686 | if (CANmodule == NULL || CANmodule->CANinterfaceCount == 0) { | ^~ CANopenLinux/CO_driver.c: At top level: CANopenLinux/CO_driver.c:726:39: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 726 | CO_CANread(CO_CANmodule_t* CANmodule, CO_CANinterface_t* interface, | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:784:13: error: unknown type name ‘CO_CANrxMsg_t’; did you mean ‘CO_CANrx_t’? 784 | CO_CANrxMsg_t* buffer) /* If not NULL, msg will be copied to buffer */ | ^~~~~~~~~~~~~ | CO_CANrx_t CANopenLinux/CO_driver.c:824:70: error: unknown type name ‘CO_CANrxMsg_t’; did you mean ‘CO_CANrx_t’? 824 | xFromEpoll(CO_CANmodule_t* CANmodule, struct epoll_event* ev, CO_CANrxMsg_t* buffer, int32_t* msgIndex) { river.c:40:33: error: ‘PTHREAD_MUTEX_INITIALIZER’ undeclared here (not in a function) 40 | pthread_mutex_t CO_EMCY_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:41:1: error: unknown type name ‘pthread_mutex_t’ 41 | pthread_mutex_t CO_OD_mutex = PTHREAD_MUTEX_INITIALIZER; | ^~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c: In function ‘disableRx’: CANopenLinux/CO_driver.c:95:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 95 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:96:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 96 | int ret = setsockopt(CANmodule->CANinterfaces[i].fd, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0); | ^~ CANopenLinux/CO_driver.c:98:61: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 98 | log_printf(LOG_ERR, CAN_FILTER_FAILED, CANmodule->CANinterfaces[i].ifName); | ^~ CANopenLinux/CO_driver.c: In function ‘setRxFilters’: CANopenLinux/CO_driver.c:119:23: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 119 | if ((CANmodule->rxFilter[i].can_id != 0) || (CANmodule->rxFilter[i].can_mask != 0)) { | ^~ CANopenLinux/CO_driver.c:119:63: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 119 | if ((CANmodule->rxFilter[i].can_id != 0) || (CANmodule->rxFilter[i].can_mask != 0)) { | ^~ CANopenLinux/CO_driver.c:121:44: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 121 | rxFiltersCpy[count] = CANmodule->rxFilter[i]; | ^~ CANopenLinux/CO_driver.c:133:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 133 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:134:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 134 | int ret = setsockopt(CANmodule->CANinterfaces[i].fd, SOL_CAN_RAW, CAN_RAW_FILTER, rxFiltersCpy, | ^~ CANopenLinux/CO_driver.c:137:61: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 137 | log_printf(LOG_ERR, CAN_FILTER_FAILED, CANmodule->CANinterfaces[i].ifName); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_init’: CANopenLinux/CO_driver.c:178:5: error: unknown type name ‘CO_CANptrSocketCan_t’ 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:178:41: error: ‘CO_CANptrSocketCan_t’ undeclared (first use in this function) 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^~~~~~~~~~~~~~~~~~~~ CANopenLinux/CO_driver.c:178:41: note: each undeclared identifier is reported only once for each function it appears in CANopenLinux/CO_driver.c:178:62: error: expected expression before ‘)’ token 178 | CO_CANptrSocketCan_t* CANptrReal = (CO_CANptrSocketCan_t*)CANptr; | ^ CANopenLinux/CO_driver.c:181:14: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 181 | CANmodule->epoll_fd = CANptrReal->epoll_fd; | ^~ CANopenLinux/CO_driver.c:181:37: error: request for member ‘epoll_fd’ in something not a structure or union 181 | CANmodule->epoll_fd = CANptrReal->epoll_fd; | ^~ CANopenLinux/CO_driver.c:182:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 182 | CANmodule->CANinterfaces = NULL; | ^~ CANopenLinux/CO_driver.c:183:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 183 | CANmodule->CANinterfaceCount = 0; | ^~ CANopenLinux/CO_driver.c:201:14: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 201 | CANmodule->rxFilter = calloc(CANmodule->rxSize, sizeof(struct can_filter)); | ^~ CANopenLinux/CO_driver.c:202:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 202 | if (CANmodule->rxFilter == NULL) { | ^~ CANopenLinux/CO_driver.c:209:27: warning: conversion from ‘unsigned int’ to ‘uint16_t’ {aka ‘short unsigned int’} changes value from ‘4294967295’ to ‘65535’ [-Woverflow] 209 | rxArray[i].mask = 0xFFFFFFFFU; | ^~~~~~~~~~~ CANopenLinux/CO_driver.c:212:19: error: ‘CO_CANrx_t’ has no member named ‘can_ifindex’ 212 | rxArray[i].can_ifindex = 0; | ^ CANopenLinux/CO_driver.c:213:19: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 213 | rxArray[i].timestamp.tv_sec = 0; | ^ CANopenLinux/CO_driver.c:214:19: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 214 | rxArray[i].timestamp.tv_nsec = 0; | ^ CANopenLinux/CO_driver.c:219:58: error: request for member ‘can_ifindex’ in something not a structure or union 219 | ret = CO_CANmodule_addInterface(CANmodule, CANptrReal->can_ifindex); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_addInterface’: CANopenLinux/CO_driver.c:239:5: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 239 | CO_CANinterface_t* interface; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:241:12: error: variable ‘ev’ has initializer but incomplete type 241 | struct epoll_event ev = {0}; | ^~~~~~~~~~~ CANopenLinux/CO_driver.c:241:30: warning: excess elements in struct initializer 241 | struct epoll_event ev = {0}; | ^ CANopenLinux/CO_driver.c:241:30: note: (near initialization for ‘ev’) CANopenLinux/CO_driver.c:241:24: error: storage size of ‘ev’ isn’t known 241 | struct epoll_event ev = {0}; | ^~ CANopenLinux/CO_driver.c:252:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 252 | CANmodule->CANinterfaceCount++; | ^~ CANopenLinux/CO_driver.c:253:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 253 | CANmodule->CANinterfaces = realloc(CANmodule->CANinterfaces, | ^~ CANopenLinux/CO_driver.c:253:49: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 253 | CANmodule->CANinterfaces = realloc(CANmodule->CANinterfaces, | ^~ CANopenLinux/CO_driver.c:254:51: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 254 | ((CANmodule->CANinterfaceCount) * sizeof(*CANmodule->CANinterfaces))); | ^~ CANopenLinux/CO_driver.c:254:91: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 254 | ((CANmodule->CANinterfaceCount) * sizeof(*CANmodule->CANinterfaces))); | ^~ CANopenLinux/CO_driver.c:255:18: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 255 | if (CANmodule->CANinterfaces == NULL) { | ^~ CANopenLinux/CO_driver.c:259:27: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 259 | interface = &CANmodule->CANinterfaces[CANmodule->CANinterfaceCount - 1]; | ^~ CANopenLinux/CO_driver.c:259:52: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 259 | interface = &CANmodule->CANinterfaces[CANmodule->CANinterfaceCount - 1]; | ^~ CANopenLinux/CO_driver.c:261:14: error: request for member ‘can_ifindex’ in something not a structure or union 261 | interface->can_ifindex = can_ifindex; | ^~ CANopenLinux/CO_driver.c:262:51: error: request for member ‘ifName’ in something not a structure or union 262 | ifName = if_indextoname(can_ifindex, interface->ifName); | ^~ CANopenLinux/CO_driver.c:269:14: error: request for member ‘fd’ in something not a structure or union 269 | interface->fd = socket(PF_CAN, SOCK_RAW, CAN_RAW); | ^~ CANopenLinux/CO_driver.c:270:18: error: request for member ‘fd’ in something not a structure or union 270 | if (interface->fd < 0) { | ^~ CANopenLinux/CO_driver.c:277:31: error: request for member ‘fd’ in something not a structure or union 277 | ret = setsockopt(interface->fd, SOL_SOCKET, SO_RXQ_OVFL, &tmp, sizeof(tmp)); | ^~ CANopenLinux/CO_driver.c:285:31: error: request for member ‘fd’ in something not a structure or union 285 | ret = setsockopt(interface->fd, SOL_SOCKET, SO_TIMESTAMPING, &tmp, sizeof(tmp)); | ^~ CANopenLinux/CO_driver.c:298:25: error: request for member ‘fd’ in something not a structure or union 298 | getsockopt(interface->fd, SOL_SOCKET, SO_RCVBUF, (void*)&bytes, &sLen); | ^~ CANopenLinux/CO_driver.c:300:60: error: request for member ‘ifName’ in something not a structure or union 300 | log_printf(LOG_INFO, CAN_SOCKET_BUF_SIZE, interface->ifName, bytes / 446, bytes); | ^~ CANopenLinux/CO_driver.c:307:25: error: request for member ‘fd’ in something not a structure or union 307 | ret = bind(interface->fd, (struct sockaddr*)&sockAddr, sizeof(sockAddr)); | ^~ CANopenLinux/CO_driver.c:309:58: error: request for member ‘ifName’ in something not a structure or union 309 | log_printf(LOG_ERR, CAN_BINDING_FAILED, interface->ifName); | ^~ CANopenLinux/CO_driver.c:331:17: error: ‘EPOLLIN’ undeclared (first use in this function) 331 | ev.events = EPOLLIN; | ^~~~~~~ CANopenLinux/CO_driver.c:332:27: error: request for member ‘fd’ in something not a structure or union 332 | ev.data.fd = interface->fd; | ^~ CANopenLinux/CO_driver.c:333:11: warning: implicit declaration of function ‘epoll_ctl’ [-Wimplicit-function-declaration] 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~~~~~~~~ CANopenLinux/CO_driver.c:333:30: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~ CANopenLinux/CO_driver.c:333:42: error: ‘EPOLL_CTL_ADD’ undeclared (first use in this function) 333 | ret = epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_ADD, ev.data.fd, &ev); | ^~~~~~~~~~~~~ CANopenLinux/CO_driver.c:241:24: warning: unused variable ‘ev’ [-Wunused-variable] 241 | struct epoll_event ev = {0}; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_disable’: CANopenLinux/CO_driver.c:356:30: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 356 | for (i = 0; i < CANmodule->CANinterfaceCount; i++) { | ^~ CANopenLinux/CO_driver.c:357:9: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 357 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[i]; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:357:50: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 357 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[i]; | ^~ CANopenLinux/CO_driver.c:363:28: error: ‘CO_CANmodule_t’ has no member named ‘epoll_fd’ 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~ CANopenLinux/CO_driver.c:363:40: error: ‘EPOLL_CTL_DEL’ undeclared (first use in this function) 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~~~~~~~~~~~~ CANopenLinux/CO_driver.c:363:64: error: request for member ‘fd’ in something not a structure or union 363 | epoll_ctl(CANmodule->epoll_fd, EPOLL_CTL_DEL, interface->fd, NULL); | ^~ CANopenLinux/CO_driver.c:364:24: error: request for member ‘fd’ in something not a structure or union 364 | close(interface->fd); | ^~ CANopenLinux/CO_driver.c:365:18: error: request for member ‘fd’ in something not a structure or union 365 | interface->fd = -1; | ^~ CANopenLinux/CO_driver.c:367:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 367 | CANmodule->CANinterfaceCount = 0; | ^~ CANopenLinux/CO_driver.c:368:18: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 368 | if (CANmodule->CANinterfaces != NULL) { | ^~ CANopenLinux/CO_driver.c:369:23: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 369 | free(CANmodule->CANinterfaces); | ^~ CANopenLinux/CO_driver.c:371:14: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 371 | CANmodule->CANinterfaces = NULL; | ^~ CANopenLinux/CO_driver.c:373:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 373 | if (CANmodule->rxFilter != NULL) { | ^~ CANopenLinux/CO_driver.c:374:23: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 374 | free(CANmodule->rxFilter); | ^~ CANopenLinux/CO_driver.c:376:14: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 376 | CANmodule->rxFilter = NULL; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANrxBufferInit’: CANopenLinux/CO_driver.c:397:15: error: ‘CO_CANrx_t’ has no member named ‘can_ifindex’ 397 | buffer->can_ifindex = 0; | ^~ CANopenLinux/CO_driver.c:398:15: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 398 | buffer->timestamp.tv_nsec = 0; | ^~ CANopenLinux/CO_driver.c:399:15: error: ‘CO_CANrx_t’ has no member named ‘timestamp’ 399 | buffer->timestamp.tv_sec = 0; | ^~ CANopenLinux/CO_driver.c:409:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 409 | CANmodule->rxFilter[index].can_id = buffer->ident; | ^~ CANopenLinux/CO_driver.c:410:18: error: ‘CO_CANmodule_t’ has no member named ‘rxFilter’ 410 | CANmodule->rxFilter[index].can_mask = buffer->mask; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANtxBufferInit’: CANopenLinux/CO_driver.c:467:15: error: ‘CO_CANtx_t’ has no member named ‘can_ifindex’ 467 | buffer->can_ifindex = 0; | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANsend’: CANopenLinux/CO_driver.c:631:57: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 631 | if (CANmodule == NULL || buffer == NULL || CANmodule->CANinterfaceCount == 0) { | ^~ CANopenLinux/CO_driver.c:635:5: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 635 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[0]; | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:635:46: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaces’ 635 | CO_CANinterface_t* interface = &CANmodule->CANinterfaces[0]; | ^~ CANopenLinux/CO_driver.c:636:39: error: request for member ‘fd’ in something not a structure or union 636 | if (interface == NULL || interface->fd < 0) { | ^~ CANopenLinux/CO_driver.c:645:72: error: request for member ‘ifName’ in something not a structure or union 645 | log_printf(LOG_ERR, DBG_CAN_TX_FAILED, buffer->ident, interface->ifName); | ^~ CANopenLinux/CO_driver.c:650:31: error: request for member ‘fd’ in something not a structure or union 650 | ssize_t n = send(interface->fd, buffer, CAN_MTU, MSG_DONTWAIT); | ^~ CANopenLinux/CO_driver.c: In function ‘CO_CANmodule_process’: CANopenLinux/CO_driver.c:686:39: error: ‘CO_CANmodule_t’ has no member named ‘CANinterfaceCount’ 686 | if (CANmodule == NULL || CANmodule->CANinterfaceCount == 0) { | ^~ CANopenLinux/CO_driver.c: At top level: CANopenLinux/CO_driver.c:726:39: error: unknown type name ‘CO_CANinterface_t’; did you mean ‘CO_CANinterfaceState_t’? 726 | CO_CANread(CO_CANmodule_t* CANmodule, CO_CANinterface_t* interface, | ^~~~~~~~~~~~~~~~~ | CO_CANinterfaceState_t CANopenLinux/CO_driver.c:784:13: error: unknown type name ‘CO_CANrxMsg_t’; did you mean ‘CO_CANrx_t’? 784 | CO_CANrxMsg_t* buffer) /* If not NULL, msg will be copied to buffer */ | ^~~~~~~~~~~~~ | CO_CANrx_t CANopenLinux/CO_driver.c:824:70: error: unknown type name ‘CO_CANrxMsg_t’; did you mean ‘CO_CANrx_t’? 824 | xFromEpoll(CO_CANmodule_t* CANmodule, struct epoll_event* ev, CO_CANrxMsg_t* buffer, int32_t* msgIndex) {
最新发布
10-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值