(如何)我可以从套接字描述符中找到套接字类型吗?

时间:2010-07-10 03:06:36

标签: c networking sockets

我正在编写一个程序来捕获套接字网络流以显示网络活动。 为此,我想知道是否有任何方法可以从套接字描述符中确定套接字类型。

我知道我可以使用getsockname找到套接字系列,但我找不到找到套接字类型的方法。

例如,我想查找此套接字是否作为UDP或TCP打开。 感谢您提前获得任何建议。

YEH

1 个答案:

答案 0 :(得分:19)

因为你提到getsockname我假设你在谈论POSIX套接字。

您可以通过getsockopt调用SO_TYPE函数来获取套接字类型。例如:

#include <stdio.h>
#include <sys/socket.h>

void main (void) {
    int fd = socket( AF_INET, SOCK_STREAM, 0 );
    int type;
    int length = sizeof( int );

    getsockopt( fd, SOL_SOCKET, SO_TYPE, &type, &length );

    if (type == SOCK_STREAM) puts( "It's a TCP socket." );
    else puts ("Wait... what happened?");
}

请注意,我的示例没有进行任何错误检查。你应该在使用之前解决这个问题。有关详细信息,请参阅getsockopt()sys/socket.h的POSIX.1文档。

相关问题