-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSock_ntop.c
More file actions
92 lines (57 loc) · 1.46 KB
/
Sock_ntop.c
File metadata and controls
92 lines (57 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "header.h"
#ifdef HAVE_SOCKADDR_DL_STRUCT
#include <net/if_dl.h>
#endif
char *sock_ntop(const struct sockaddr * sa,socklen_t salen){
char ptr[8];
memset(ptr,'\0',8);
static char str[128];
memset(str,'\0',128);
switch(sa->sa_family){
case AF_IENT:
struct sockaddr_in *sin = (struct sockaddr_in*)sa;
if(inet_ntop(AF_IENT,&sin->sin_addr,str,sizeof(str)) == NULL)
return (NULL);
if(ntohs(sin->sin_port) != 0){
snsprintf(ptr,sizeof(ptr),":%d",nthos(sin->sin_port));
strcat(str,ptr);
}
return str;
break;
#ifdef IPV6
case AF_IENT6:
struct sockaddr_in6 *sin6 = (struct sockaddr_in6*)sa;
str[0] ='[';
if(inet_ntop(AF_INET6,&sin6->sin6_addr,str+1,sizeof(str)-1) == NULL)
return (NULL);
if(ntohs(sin6->sin6_port) != 0){
snprintf(ptr,sizeof(ptr),"]:%d",nthos(sin6->sin6_port));
strcat(str,ptr);
}
return str+1;
break;
#endif
#ifdef AF_UNIX
case AF_UNIX:
struct sockaddr_un *unp = (struct sockaddr_un*)sa;
if(unp->sun_path[0] == 0)
strcpy(str,"(no pathname bound)");
else
snprintf(str,sizeof(str),"%s",unp->sun_path);
return str;
break;
#endif
default:
snprintf(str,sizeof(str),"sock_ntop:unknown AF_XXXX:%d,len:%d",
sa->sa_family,salen);
return str;
break;
}
return str;
}
char * Sock_ntop(const struct sockaddr* sa,socklen_t salen){
char *ptr;
if((ptr = sock_ntop(sa,salen)) == NULL)
return NULL;
return (ptr);
}