4

SO_PROTOCOLOS X は、呼び出し元が「...ソケット タイプを整数として取得する」ことを可能にするソケット オプションを提供しません。( 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でこれを達成するにはどうすればよいですか?

4

1 に答える 1

2

(TCP に対応) や(UDP に対応) などSO_TYPEの値を返す標準のソケット オプションで十分です。SCTP では、TCP または SCTP に対応する可能性があり、それらを区別するのに役立ちますが、MacOS X は SCTP をサポートしていません。SOCK_STREAMSOCK_DGRAMSOCK_STREAMSO_PROTOCOL

Unix ドメイン ソケットはプロトコル番号を使用しません。したがって、SO_TYPEそこでも正しい選択です。

于 2014-06-26T22:10:49.107 に答える