Поскольку вы упоминаете 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?");
}
Обратите внимание, что в моем примере не выполняется проверка ошибок. Вы должны исправить это перед использованием. Для получения дополнительной информации см. Документы POSIX.1 для getsockopt () и sys / socket.h .