當前位置:編程學習大全網 - 源碼下載 - UNIX網絡編程中Steven大神封裝的 sock_ntop()函數的實現,哪個熱心的朋友有,能分享壹下代碼嗎

UNIX網絡編程中Steven大神封裝的 sock_ntop()函數的實現,哪個熱心的朋友有,能分享壹下代碼嗎

#include "unp.h"

#ifdef HAVE_SOCKADDR_DL_STRUCT

#include <net/if_dl.h>

#endif

/*?include?sock_ntop?*/

char?*

sock_ntop(const?struct?sockaddr?*sa,?socklen_t?salen)

{

char portstr[8];

static?char?str[128]; /*?Unix?domain?is?largest?*/

switch?(sa->sa_family)?{

case?AF_INET:?{

struct?sockaddr_in *sin?=?(struct?sockaddr_in?*)?sa;

if?(inet_ntop(AF_INET,?&sin->sin_addr,?str,?sizeof(str))?==?NULL)

return(NULL);

if?(ntohs(sin->sin_port)?!=?0)?{

snprintf(portstr,?sizeof(portstr),?":%d",?ntohs(sin->sin_port));

strcat(str,?portstr);

}

return(str);

}

/*?end?sock_ntop?*/

#ifdef IPV6

case?AF_INET6:?{

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(portstr,?sizeof(portstr),?"]:%d",?ntohs(sin6->sin6_port));

strcat(str,?portstr);

return(str);

}

return?(str?+?1);

}

#endif

#ifdef AF_UNIX

case?AF_UNIX:?{

struct?sockaddr_un *unp?=?(struct?sockaddr_un?*)?sa;

/*?OK?to?have?no?pathname?bound?to?the?socket:?happens?on

every?connect()?unless?client?calls?bind()?first.?*/

if?(unp->sun_path[0]?==?0)

strcpy(str,?"(no?pathname?bound)");

else

snprintf(str,?sizeof(str),?"%s",?unp->sun_path);

return(str);

}

#endif

#ifdef HAVE_SOCKADDR_DL_STRUCT

case?AF_LINK:?{

struct?sockaddr_dl *sdl?=?(struct?sockaddr_dl?*)?sa;

if?(sdl->sdl_nlen?>?0)

snprintf(str,?sizeof(str),?"%*s?(index?%d)",

?sdl->sdl_nlen,?&sdl->sdl_data[0],?sdl->sdl_index);

else

snprintf(str,?sizeof(str),?"AF_LINK,?index=%d",?sdl->sdl_index);

return(str);

}

#endif

default:

snprintf(str,?sizeof(str),?"sock_ntop:?unknown?AF_xxx:?%d,?len?%d",

?sa->sa_family,?salen);

return(str);

}

return?(NULL);

}

char?*

Sock_ntop(const?struct?sockaddr?*sa,?socklen_t?salen)

{

char *ptr;

if?(?(ptr?=?sock_ntop(sa,?salen))?==?NULL)

err_sys("sock_ntop?error"); /*?inet_ntop()?sets?errno?*/

return(ptr);

}

  • 上一篇:如何安裝apt-get
  • 下一篇:Kd主要源代碼
  • copyright 2024編程學習大全網