首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OS getsockopt:没有SO_PROTOCOL

OS getsockopt:没有SO_PROTOCOL
EN

Stack Overflow用户
提问于 2014-06-25 21:30:40
回答 1查看 1.4K关注 0票数 4

OS没有提供SO_PROTOCOL套接字选项,该选项允许调用方"...retrieve套接字类型为整数“(http://linux.die.net/man/7/socket)。

换句话说,以下程序在linux下构建和工作,但不会在OS下编译:

代码语言:javascript
复制
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(int argc, char **argv)
{
    int c, s, type, len;
    len = sizeof(type);

    s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s < 0)
    {  
        fprintf(stderr, "socket kaboom: %s\n", strerror(errno));
        return 1;
    }
    if (getsockopt(s, SOL_SOCKET, SO_PROTOCOL, &type, &len) < 0)
    {  
        fprintf(stderr, "getsosockopt kaboom: %s\n", strerror(errno));
        return 1;
    }
    printf("socket type: %d\n", type);
    return 0;
}

如何在OS下完成这一任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-26 22:10:49

标准的SO_TYPE套接字选项(返回SOCK_STREAM (对应于TCP)和SOCK_DGRAM (对应于UDP) )应该足够了。对于SCTP,SOCK_STREAM可能对应于TCP或SCTP,而SO_PROTOCOL可以区分它们,但MacOS X不支持SCTP。

Unix域套接字不使用协议号;因此,SO_TYPE也是正确的选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24418930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档