C语言 OS X getsockopt: no SO_PROTOCOL



OS X不提供SO_PROTOCOL套接字选项,允许调用者"…"检索套接字类型为整数。(http://linux.die.net/man/7/socket)

换句话说,下面的程序可以在linux下运行,但在OS X下无法编译:

#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: %sn", strerror(errno));
        return 1;
    }
    if (getsockopt(s, SOL_SOCKET, SO_PROTOCOL, &type, &len) < 0)
    {  
        fprintf(stderr, "getsosockopt kaboom: %sn", strerror(errno));
        return 1;
    }
    printf("socket type: %dn", type);
    return 0;
}

如何在OS X下实现这一点?

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

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

相关内容

  • 没有找到相关文章

最新更新