*/
void sock_fmterror(const char *caller, int errcode, char *errbuf, int errbuflen)
{
-#ifdef _WIN32
- char message[SOCK_ERRBUF_SIZE]; /* We're forcing "ANSI" */
-
if (errbuf == NULL)
return;
- pcap_win32_err_to_str(errcode, message);
- if ((caller) && (*caller))
- pcap_snprintf(errbuf, errbuflen, "%s%s", caller, message);
- else
- pcap_snprintf(errbuf, errbuflen, "%s", message);
+#ifdef _WIN32
+ pcap_fmt_errmsg_for_win32_err(errbuf, errbuflen, errcode,
+ "%s", caller);
#else
- char *message;
-
- if (errbuf == NULL)
- return;
-
- message = strerror(errcode);
-
- if ((caller) && (*caller))
- pcap_snprintf(errbuf, errbuflen, "%s%s (%d)", caller, message, errcode);
- else
- pcap_snprintf(errbuf, errbuflen, "%s (%d)", message, errcode);
+ pcap_fmt_errmsg_for_errno(errbuf, errbuflen, errcode,
+ "%s", caller);
#endif
}
*
* \param caller: a pointer to a user-allocated string which contains a message that has
* to be printed *before* the true error message. It could be, for example, 'this error
- * comes from the recv() call at line 31'. It may be NULL.
+ * comes from the recv() call at line 31'.
*
* \param errbuf: a pointer to an user-allocated buffer that will contain the complete
* error message. This buffer has to be at least 'errbuflen' in length.
void sock_geterror(const char *caller, char *errbuf, int errbuflen)
{
#ifdef _WIN32
- if (errbuf == NULL)
- return;
sock_fmterror(caller, GetLastError(), errbuf, errbuflen);
#else
- if (errbuf == NULL)
- return;
sock_fmterror(caller, errno, errbuf, errbuflen);
#endif
}
sock = socket(addrinfo->ai_family, addrinfo->ai_socktype, addrinfo->ai_protocol);
if (sock == INVALID_SOCKET)
{
- sock_geterror("socket(): ", errbuf, errbuflen);
+ sock_geterror("socket()", errbuf, errbuflen);
return INVALID_SOCKET;
}
/* WARNING: if the address is a mcast one, I should place the proper Win32 code here */
if (bind(sock, addrinfo->ai_addr, (int) addrinfo->ai_addrlen) != 0)
{
- sock_geterror("bind(): ", errbuf, errbuflen);
+ sock_geterror("bind()", errbuf, errbuflen);
closesocket(sock);
return INVALID_SOCKET;
}
if (addrinfo->ai_socktype == SOCK_STREAM)
if (listen(sock, nconn) == -1)
{
- sock_geterror("listen(): ", errbuf, errbuflen);
+ sock_geterror("listen()", errbuf, errbuflen);
closesocket(sock);
return INVALID_SOCKET;
}
* We have to retrieve the error message before any other socket call completes, otherwise
* the error message is lost
*/
- sock_geterror(NULL, SocketErrorMessage, sizeof(SocketErrorMessage));
+ sock_geterror("Connect to socket failed",
+ SocketErrorMessage, sizeof(SocketErrorMessage));
/* Returns the numeric address of the host that triggered the error */
sock_getascii_addrport((struct sockaddr_storage *) tempaddrinfo->ai_addr, TmpBuffer, sizeof(TmpBuffer), NULL, 0, NI_NUMERICHOST, TmpBuffer, sizeof(TmpBuffer));
pcap_snprintf(errbufptr, bufspaceleft,
- "Is the server properly installed on %s? connect() failed: %s", TmpBuffer, SocketErrorMessage);
+ "Is the server properly installed on %s? %s", TmpBuffer, SocketErrorMessage);
/* In case more then one 'connect' fails, we manage to keep all the error messages */
msglen = strlen(errbufptr);
*/
if (shutdown(sock, SHUT_WR))
{
- sock_geterror("shutdown(): ", errbuf, errbuflen);
+ sock_geterror("shutdown()", errbuf, errbuflen);
/* close the socket anyway */
closesocket(sock);
return -1;
*/
return -2;
}
- sock_fmterror("send(): ", errcode, errbuf, errbuflen);
+ sock_fmterror("send()", errcode, errbuf, errbuflen);
#else
errcode = errno;
if (errcode == ECONNRESET || errcode == EPIPE)
*/
return -2;
}
- sock_fmterror("send(): ", errcode, errbuf, errbuflen);
+ sock_fmterror("send()", errcode, errbuf, errbuflen);
#endif
return -1;
}
if (errno == EINTR)
return -3;
#endif
- sock_geterror("recv(): ", errbuf, errbuflen);
+ sock_geterror("recv()", errbuf, errbuflen);
return -1;
}
* supplied to us, the excess data is discarded,
* and we'll report an error.
*/
- sock_geterror("recv(): ", errbuf, errbuflen);
+ sock_geterror("recv()", errbuf, errbuflen);
return -1;
}
#else /* _WIN32 */
{
if (errno == EINTR)
return -3;
- sock_geterror("recv(): ", errbuf, errbuflen);
+ sock_geterror("recv()", errbuf, errbuflen);
return -1;
}
#ifdef HAVE_STRUCT_MSGHDR_MSG_FLAGS
if (getsockname(sock, (struct sockaddr *) &mysockaddr, &sockaddrlen) == -1)
{
- sock_geterror("getsockname(): ", errbuf, errbuflen);
+ sock_geterror("getsockname()", errbuf, errbuflen);
return 0;
}
/* If the user wants to receive an error message */
if (errbuf)
{
- sock_geterror("getnameinfo(): ", errbuf, errbuflen);
+ sock_geterror("getnameinfo()", errbuf, errbuflen);
errbuf[errbuflen - 1] = 0;
}