OS没有提供SO_PROTOCOL套接字选项,该选项允许调用方"...retrieve套接字类型为整数“(http://linux.die.net/man/7/socket)。
换句话说,以下程序在linux下构建和工作,但不会在OS下编译:
#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下完成这一任务?
发布于 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也是正确的选择。
https://stackoverflow.com/questions/24418930
复制相似问题