getsockopt函数总是错误

走过海 发布于 2013/11/09 11:21
阅读 326
收藏 0

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <netinet/sctp.h>
#include <errno.h>
 
void
Getsockopt(int fd, int level, int optname, void *optval, socklen_t *optlenptr)
{
        if (getsockopt(fd, level, optname, optval, optlenptr) < 0) {
            printf("errno :%d\n", errno);
            exit(-1);
        }
                     
}
 
 
int
main(void)
{
    int    sock_fd, retsz;
    struct sctp_status status;;
    //int    status;
 
    retsz = sizeof(struct sctp_status);
    /*sock_fd = socket(AF_INET, SOCK_STREAM, 0);
    Getsockopt(sock_fd, SOL_SOCKET,  SO_RCVBUF, &status, &retsz);
    printf("%d\n", status);*/
    sock_fd = socket(AF_INET,SOCK_SEQPACKET, IPPROTO_SCTP);
    bzero(&status, sizeof(struct sctp_status)); 
    Getsockopt(sock_fd, IPPROTO_SCTP, SCTP_STATUS, &status, &retsz);
    printf("%d\n", status.sstat_outstrms);
}
注释掉的是获取通用选项接受缓冲区,没注释掉的是sctp的SCTP_STATUS,

为什么getsockopt获取sctp的时候就出错呢?,错误errno是22

谢谢大家

加载中
0
走过海
是对SCTP_STATUS不支持吗?
0
走过海
执行checksctp的结果是SCTP supported

0
jingweiyoung
jingweiyoung
errno 22是非法参数,你再检查一下传参的地方对不对

走过海
修改了查询的选项就没问题,就是那个通用选项就能正常执行(被注释掉的那一段)
返回顶部
顶部