⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 error.c

📁 在Linux/Unix环境下发包测试性能的工具
💻 C
字号:
/*---------------------------------------------------------------  * Copyright (c) 1999,2000,2001,2002,2003                               * The Board of Trustees of the University of Illinois             * All Rights Reserved.                                            *---------------------------------------------------------------  * Permission is hereby granted, free of charge, to any person     * obtaining a copy of this software (Iperf) and associated        * documentation files (the "Software"), to deal in the Software   * without restriction, including without limitation the           * rights to use, copy, modify, merge, publish, distribute,         * sublicense, and/or sell copies of the Software, and to permit      * persons to whom the Software is furnished to do * so, subject to the following conditions:  * *      * Redistributions of source code must retain the above  * copyright notice, this list of conditions and  * the following disclaimers.  * *      * Redistributions in binary form must reproduce the above  * copyright notice, this list of conditions and the following  * disclaimers in the documentation and/or other materials  * provided with the distribution.  *  *      * Neither the names of the University of Illinois, NCSA,  * nor the names of its contributors may be used to endorse  * or promote products derived from this Software without * specific prior written permission.  *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTIBUTORS OR COPYRIGHT  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  * ________________________________________________________________ * National Laboratory for Applied Network Research  * National Center for Supercomputing Applications  * University of Illinois at Urbana-Champaign  * http://www.ncsa.uiuc.edu * ________________________________________________________________  * * error.c * by Mark Gates <mgates@nlanr.net> * ------------------------------------------------------------------- * error handlers * ------------------------------------------------------------------- */#include "headers.h"#include "util.h"#ifdef __cplusplusextern "C" {#endif#ifdef WIN32/* ------------------------------------------------------------------- * Implement a simple Win32 strerror function for our purposes. * These error values weren't handled by FormatMessage; * any particular reason why not?? * ------------------------------------------------------------------- */struct mesg {    DWORD       err;    const char* str;};const struct mesg error_mesgs[] ={    { WSAEACCES,             "Permission denied"},    { WSAEADDRINUSE,         "Address already in use"},    { WSAEADDRNOTAVAIL,      "Cannot assign requested address"},    { WSAEAFNOSUPPORT,       "Address family not supported by protocol family"},    { WSAEALREADY,           "Operation already in progress"},    { WSAECONNABORTED,       "Software caused connection abort"},    { WSAECONNREFUSED,       "Connection refused"},    { WSAECONNRESET,         "Connection reset by peer"},    { WSAEDESTADDRREQ,       "Destination address required"},    { WSAEFAULT,             "Bad address"},    { WSAEHOSTDOWN,          "Host is down"},    { WSAEHOSTUNREACH,       "No route to host"},    { WSAEINPROGRESS,        "Operation now in progress"},    { WSAEINTR,              "Interrupted function call."},    { WSAEINVAL,             "Invalid argument."},    { WSAEISCONN,            "Socket is already connected."},    { WSAEMFILE,             "Too many open files."},    { WSAEMSGSIZE,           "Message too long"},    { WSAENETDOWN,           "Network is down"},    { WSAENETRESET,          "Network dropped connection on reset"},    { WSAENETUNREACH,        "Network is unreachable"},    { WSAENOBUFS,            "No buffer space available."},    { WSAENOPROTOOPT,        "Bad protocol option."},    { WSAENOTCONN,           "Socket is not connected"},    { WSAENOTSOCK,           "Socket operation on non-socket."},    { WSAEOPNOTSUPP,         "Operation not supported"},    { WSAEPFNOSUPPORT,       "Protocol family not supported"},    { WSAEPROCLIM,           "Too many processes."},    { WSAEPROTONOSUPPORT,    "Protocol not supported"},    { WSAEPROTOTYPE,         "Protocol wrong type for socket"},    { WSAESHUTDOWN,          "Cannot send after socket shutdown"},    { WSAESOCKTNOSUPPORT,    "Socket type not supported."},    { WSAETIMEDOUT,          "Connection timed out."},    { WSATYPE_NOT_FOUND,     "Class type not found."},    { WSAEWOULDBLOCK,        "Resource temporarily unavailable"},    { WSAHOST_NOT_FOUND,     "Host not found."},    { WSA_INVALID_HANDLE,    "Specified event object handle is invalid."},    { WSA_INVALID_PARAMETER, "One or more parameters are invalid."},    { WSA_IO_INCOMPLETE,     "Overlapped I/O event object not in signaled state."},    { WSA_IO_PENDING,        "Overlapped operations will complete later."},    { WSA_NOT_ENOUGH_MEMORY, "Insufficient memory available."},    { WSANOTINITIALISED,     "Successful WSAStartup not yet performed."},    { WSANO_DATA,            "Valid name, no data record of requested type."},    { WSANO_RECOVERY,        "This is a non-recoverable error."},    { WSASYSCALLFAILURE,     "System call failure."},    { WSASYSNOTREADY,        "Network subsystem is unavailable."},    { WSATRY_AGAIN,          "Non-authoritative host not found."},    { WSAVERNOTSUPPORTED,    "WINSOCK.DLL version out of range."},    { WSAEDISCON,            "Graceful shutdown in progress."},    { WSA_OPERATION_ABORTED, "Overlapped operation aborted."},    { 0,                     "No error."}    /* These appeared in the documentation, but didn't compile.     * { WSAINVALIDPROCTABLE,   "Invalid procedure table from service provider." },     * { WSAINVALIDPROVIDER,    "Invalid service provider version number." },     * { WSAPROVIDERFAILEDINIT, "Unable to initialize a service provider." },     */}; /* end error_mesgs[] */const char* winsock_strerror( DWORD inErrno );/* ------------------------------------------------------------------- * winsock_strerror * * returns a string representing the error code. The error messages * were taken from Microsoft's online developer library. * ------------------------------------------------------------------- */const char* winsock_strerror( DWORD inErrno ) {    const char* str = "Unknown error";    int i;    for ( i = 0; i < sizeof(error_mesgs); i++ ) {        if ( error_mesgs[i].err == inErrno ) {            str = error_mesgs[i].str;            break;        }    }    return str;} /* end winsock_strerror */#endif /* WIN32 *//* ------------------------------------------------------------------- * warn * * Prints message and return * ------------------------------------------------------------------- */void warn( const char *inMessage, const char *inFile, int inLine ) {    fflush( 0 );#ifdef NDEBUG    fprintf( stderr, "%s failed\n", inMessage );#else    /* while debugging output file/line number also */    fprintf( stderr, "%s failed (%s:%d)\n", inMessage, inFile, inLine );#endif} /* end warn *//* ------------------------------------------------------------------- * warn_errno * * Prints message and errno message, and return. * ------------------------------------------------------------------- */void warn_errno( const char *inMessage, const char *inFile, int inLine ) {    int my_err;    const char* my_str;    /* get platform's errno and error message */#ifdef WIN32    my_err = WSAGetLastError();    my_str = winsock_strerror( my_err );#else    my_err = errno;    my_str = strerror( my_err );#endif    fflush( 0 );#ifdef NDEBUG    fprintf( stderr, "%s failed: %s\n", inMessage, my_str );#else    /* while debugging output file/line number and errno value also */    fprintf( stderr, "%s failed (%s:%d): %s (%d)\n",             inMessage, inFile, inLine, my_str, my_err );#endif} /* end warn_errno */#ifdef __cplusplus} /* end extern "C" */#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -