【发布时间】:2014-08-16 14:55:51
【问题描述】:
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: %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 X 下如何做到这一点?
【问题讨论】:
-
在我看来 OS X 似乎不支持这个。你需要这个做什么?你能记住你在调用
socket(2)时使用了什么协议来创建套接字吗? -
SO_PROTOCOL不是standard。查出一个socket是TCP还是UDP之后你打算怎么做?
标签: c linux macos sockets getsockopt