netcat中输出错误信息的函数(2-1)

在netcat中,使用holler()函数与bail()函数来输出错误信息。

1 holler()函数

1.1 函数格式

holler()函数的格式为

void holler(char* str, char*  p1 = NULL, char* p2 = NULL, char* p3 = NULL, char*  p4 = NULL, char* p5 = NULL, char* p6 = NULL)

其中,参数str及p1-p6均为要输出的错误信息,其中p1-p6都有初始值,也就是说holler()函数可以使用1-7个参数均可,是一个“伪变参数的函数”。

1.2 函数实现

1.2.1 netcat是否带有-v参数

在holler()函数中,首先对变量o_verbose进行判断,如果netcat带有-v参数,即需要输出详细信息时,o_verbose的值是非零,否则为零。

if (o_verbose)

{

......

}

从代码中可以看出,只有当o_verbose的值是非零,即netcat带有-v参数时holler()函数才会起作用。

1.2.2 输出自定义的错误信息

当o_verbose的值是非零时,调用fprintf()函数,通过stderr输出自定义的错误信息。

fprintf(stderr, str, p1, p2, p3, p4, p5, p6);

其中,fprintf()和stderr请参考《C++中fprintf()函数与stdout、stderr》

1.2.3 输出网络套接字错误信息

if (h_errno)

{

fprintf(stderr, "%s\n", winsockstr(h_errno));

}

其中,h_errno是WSAGetLastError()函数的返回值,关于h_errno的详细讲解,请参考《Winsock套接字编程中的h_errno》

如果发生了网络套接字错误,则h_errno的值是零,则调用fprintf()函数,通过stderr输出错误信息。winsockstr()函数是自定义的函数,该函数的格式为

char * winsockstr(int error)

在winsockstr()函数定义中,根据参数error的值返回不同的错误信息。

char * winsockstr(int error)

{

switch (error)

{

case WSAEINTR: return("INTR          ");

case WSAEBADF: return("BADF          ");

.....

}

}
发布了314 篇原创文章 · 获赞 206 · 访问量 61万+

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/101052526