我正在编写一个程序来捕获套接字网络流以显示网络活动。 因此,我想知道是否有任何方法可以从套接字描述符确定套接字类型。
我知道可以使用getsockname找到套接字族,但我找不到找到套接字类型的方法。
例如,我想知道这个套接字是作为UDP还是TCP打开的。 感谢您提前的任何建议。
YEH
我正在编写一个程序来捕获套接字网络流以显示网络活动。 因此,我想知道是否有任何方法可以从套接字描述符确定套接字类型。
我知道可以使用getsockname找到套接字族,但我找不到找到套接字类型的方法。
例如,我想知道这个套接字是作为UDP还是TCP打开的。 感谢您提前的任何建议。
YEH
由于您提到了getsockname
,我假设您在谈论POSIX套接字。
您可以通过使用SO_TYPE
调用getsockopt
函数来获取套接字类型。例如:
#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文档。
getsockopt(_Master, SOL_SOCKET, SO_TYPE, (char*)&type, &length);
if(type == SOCK_DGRAM) puts("udp"); else puts("tcp");
。 - Beyondo