利用getsockopt读取套接字可选项
//利用getsockopt读取套接字可选项,用协议层为SQL_SOCKET,名为SO_TYPE的可选项查看套接字类型(TCP,UDP);
//sock_type.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <string.h>
void error_handling(char*message);
int main(int argc, char *argv[])
{
int tcp_sock,udp_sock;
int sock_type;
socklen_t optlen;
int state;
optlen=sizeof(sock_type);
tcp_sock=socket(PF_INET,SOCK_STREAM,0);
udp_sock=socket(PF_INET,SOCK_DGRAM,0);
printf("SOCK_STREAM:%d\n",SOCK_STREAM);
printf("SOCK_DGRAM:%d\n",SOCK_DGRAM);
state=getsockopt(tcp_sock,SOL_SOCKET,SO_TYPE,(void*)&sock_type,&optlen);
if(state)
{
error_handling("getsockopt() error!");
}
printf("Socket type one:%d\n",sock_type);
state=getsockopt(udp_sock,SOL_SOCKET,SO_TYPE,SO_TYPE,(void*)&sock_type,&optlen);
if(state)
{
error_handling("getsockopt() error!");
}
printf("Socket type two:%d\n",sock_type);
return 0;
}
void error_handling(char*message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}