if(CURL_SOCKET_BAD == newfd) {
error = SOCKERRNO;
logmsg("accept(%d, NULL, NULL) failed with error: (%d) %s",
- sockfd, error, strerror(error));
+ sockfd, error, sstrerror(error));
}
else {
logmsg("====> Client connect, fd %d. Read config from %s",
if(rc) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
if(maxretr) {
rc = wait_ms(delay);
if(rc) {
if(rc) {
error = SOCKERRNO;
logmsg("Error binding socket on port %hu: (%d) %s",
- *listenport, error, strerror(error));
+ *listenport, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(0 != rc) {
error = SOCKERRNO;
logmsg("listen(%d, 5) failed with error: (%d) %s",
- sock, error, strerror(error));
+ sock, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
goto mqttd_cleanup;
}
}
else if(got < 0) {
error = SOCKERRNO;
- logmsg("recv() returned error: (%d) %s", error, strerror(error));
+ logmsg("recv() returned error: (%d) %s", error, sstrerror(error));
fail = 1;
}
if(fail) {
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
goto server_cleanup;
}
(void *)&flag, sizeof(flag))) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto server_cleanup;
}
if(0 != rc) {
error = SOCKERRNO;
logmsg("Error binding socket on port %hu: (%d) %s",
- port, error, strerror(error));
+ port, error, sstrerror(error));
goto server_cleanup;
}
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
goto server_cleanup;
}
if(0 != rc) {
error = SOCKERRNO;
logmsg("listen() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto server_cleanup;
}
if(CURL_SOCKET_BAD == msgsock) {
error = SOCKERRNO;
logmsg("MAJOR ERROR: accept() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
break;
}
if(CURL_SOCKET_BAD == newfd) {
error = SOCKERRNO;
logmsg("accept(%d, NULL, NULL) failed with error: (%d) %s",
- sockfd, error, strerror(error));
+ sockfd, error, sstrerror(error));
}
else {
logmsg("====> Client connect");
if(rc) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
if(maxretr) {
rc = wait_ms(delay);
if(rc) {
if(rc) {
error = SOCKERRNO;
logmsg("Error binding socket on port %hu: (%d) %s",
- *listenport, error, strerror(error));
+ *listenport, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(0 != rc) {
error = SOCKERRNO;
logmsg("listen(%d, 5) failed with error: (%d) %s",
- sock, error, strerror(error));
+ sock, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
write_stdout("FAIL\n", 5);
goto sockfilt_cleanup;
}
if(rc) {
error = SOCKERRNO;
logmsg("Error connecting to port %hu: (%d) %s",
- connectport, error, strerror(error));
+ connectport, error, sstrerror(error));
write_stdout("FAIL\n", 5);
goto sockfilt_cleanup;
}
if(rc) {
int error = SOCKERRNO;
logmsg("Error connecting to %s:%hu: (%d) %s",
- connectaddr, connectport, error, strerror(error));
+ connectaddr, connectport, error, sstrerror(error));
return CURL_SOCKET_BAD;
}
logmsg("Connected fine to %s:%d", connectaddr, connectport);
if(CURL_SOCKET_BAD == newfd) {
error = SOCKERRNO;
logmsg("accept(%d, NULL, NULL) failed with error: (%d) %s",
- sockfd, error, strerror(error));
+ sockfd, error, sstrerror(error));
}
else {
curl_socket_t remotefd;
if(rc) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
if(maxretr) {
rc = wait_ms(delay);
if(rc) {
if(rc) {
error = SOCKERRNO;
- logmsg("Error binding socket on port %hu: (%d) %s",
- *listenport, error, strerror(error));
+#ifdef USE_UNIX_SOCKETS
+ if(socket_domain == AF_UNIX)
+ logmsg("Error binding socket on path %s: (%d) %s",
+ unix_socket, error, sstrerror(error));
+ else
+#endif
+ logmsg("Error binding socket on port %hu: (%d) %s",
+ *listenport, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(0 != rc) {
error = SOCKERRNO;
logmsg("listen(%d, 5) failed with error: (%d) %s",
- sock, error, strerror(error));
+ sock, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto socks5_cleanup;
}
/* nothing to read at the moment */
return 0;
}
- logmsg("recv() returned error: (%d) %s", error, strerror(error));
+ logmsg("recv() returned error: (%d) %s", error, sstrerror(error));
fail = 1;
}
if(fail) {
if(CURL_SOCKET_BAD == serverfd) {
error = SOCKERRNO;
logmsg("Error creating socket for server connection: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
return CURL_SOCKET_BAD;
}
if(rc) {
error = SOCKERRNO;
logmsg("Error connecting to server port %hu: (%d) %s",
- port, error, strerror(error));
+ port, error, sstrerror(error));
sclose(serverfd);
return CURL_SOCKET_BAD;
}
return 0;
}
logmsg("MAJOR ERROR: accept() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
return CURL_SOCKET_BAD;
}
if(0 != curlx_nonblock(msgsock, TRUE)) {
error = SOCKERRNO;
logmsg("curlx_nonblock failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(msgsock);
return CURL_SOCKET_BAD;
}
(void *)&flag, sizeof(flag))) {
error = SOCKERRNO;
logmsg("setsockopt(SO_KEEPALIVE) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(msgsock);
return CURL_SOCKET_BAD;
}
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
goto sws_cleanup;
}
(void *)&flag, sizeof(flag))) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto sws_cleanup;
}
if(0 != curlx_nonblock(sock, TRUE)) {
error = SOCKERRNO;
logmsg("curlx_nonblock failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto sws_cleanup;
}
}
if(0 != rc) {
error = SOCKERRNO;
- logmsg("Error binding socket: (%d) %s", error, strerror(error));
+#ifdef USE_UNIX_SOCKETS
+ if(socket_domain == AF_UNIX)
+ logmsg("Error binding socket on path %s: (%d) %s",
+ unix_socket, error, sstrerror(error));
+ else
+#endif
+ logmsg("Error binding socket on port %hu: (%d) %s",
+ port, error, sstrerror(error));
goto sws_cleanup;
}
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
goto sws_cleanup;
}
rc = listen(sock, 5);
if(0 != rc) {
error = SOCKERRNO;
- logmsg("listen() failed with error: (%d) %s",
- error, strerror(error));
+ logmsg("listen() failed with error: (%d) %s", error, sstrerror(error));
goto sws_cleanup;
}
if(rc < 0) {
error = SOCKERRNO;
- logmsg("select() failed with error: (%d) %s",
- error, strerror(error));
+ logmsg("select() failed with error: (%d) %s", error, sstrerror(error));
goto sws_cleanup;
}
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
result = 1;
goto tftpd_cleanup;
}
(void *)&flag, sizeof(flag))) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
result = 1;
goto tftpd_cleanup;
}
#endif /* ENABLE_IPV6 */
if(0 != rc) {
error = SOCKERRNO;
- logmsg("Error binding socket on port %hu: (%d) %s",
- port, error, strerror(error));
+ logmsg("Error binding socket on port %hu: (%d) %s", port, error,
+ sstrerror(error));
result = 1;
goto tftpd_cleanup;
}
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
goto tftpd_cleanup;
}
}
#ifdef WIN32
+/* use instead of strerror() on generic Windows */
+static const char *win32_strerror(int err, char *buf, size_t buflen)
+{
+ if(!FormatMessageA((FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err,
+ LANG_NEUTRAL, buf, (DWORD)buflen, NULL))
+ msnprintf(buf, buflen, "Unknown error %lu (%#lx)", err, err);
+ return buf;
+}
+
/* use instead of perror() on generic windows */
void win32_perror(const char *msg)
{
char buf[512];
DWORD err = SOCKERRNO;
-
- if(!FormatMessageA((FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err,
- LANG_NEUTRAL, buf, sizeof(buf), NULL))
- msnprintf(buf, sizeof(buf), "Unknown error %lu (%#lx)", err, err);
+ win32_strerror(err, buf, sizeof(buf));
if(msg)
fprintf(stderr, "%s: ", msg);
fprintf(stderr, "%s\n", buf);
/* flush buffers of all streams regardless of their mode */
_flushall();
}
+
+/* socket-safe strerror (works on WinSock errors, too */
+const char *sstrerror(int err)
+{
+ static char buf[512];
+ return win32_strerror(err, buf, sizeof(buf));
+}
#endif /* WIN32 */
/* set by the main code to point to where the test dir is */
sau->sun_family = AF_UNIX;
strncpy(sau->sun_path, unix_socket, sizeof(sau->sun_path) - 1);
rc = bind(sock, (struct sockaddr*)sau, sizeof(struct sockaddr_un));
- if(0 != rc && errno == EADDRINUSE) {
+ if(0 != rc && SOCKERRNO == EADDRINUSE) {
struct_stat statbuf;
/* socket already exists. Perhaps it is stale? */
curl_socket_t unixfd = socket(AF_UNIX, SOCK_STREAM, 0);
if(CURL_SOCKET_BAD == unixfd) {
- error = SOCKERRNO;
- logmsg("Error binding socket, failed to create socket at %s: (%d) %s",
- unix_socket, error, strerror(error));
- return rc;
+ logmsg("Failed to create socket at %s: (%d) %s",
+ unix_socket, SOCKERRNO, sstrerror(SOCKERRNO));
+ return -1;
}
/* check whether the server is alive */
rc = connect(unixfd, (struct sockaddr*)sau, sizeof(struct sockaddr_un));
- error = errno;
+ error = SOCKERRNO;
sclose(unixfd);
- if(ECONNREFUSED != error) {
- logmsg("Error binding socket, failed to connect to %s: (%d) %s",
- unix_socket, error, strerror(error));
+ if(0 != rc && ECONNREFUSED != error) {
+ logmsg("Failed to connect to %s: (%d) %s",
+ unix_socket, error, sstrerror(error));
return rc;
}
/* socket server is not alive, now check if it was actually a socket. */
}
#ifdef S_IFSOCK
if((statbuf.st_mode & S_IFSOCK) != S_IFSOCK) {
- logmsg("Error binding socket, failed to stat %s: (%d) %s",
- unix_socket, error, strerror(error));
- return rc;
+ logmsg("Error binding socket, failed to stat %s", unix_socket);
+ return -1;
}
#endif
/* dead socket, cleanup and retry bind */
void win32_init(void);
void win32_cleanup(void);
+const char *sstrerror(int err);
+#else /* WIN32 */
+
+#define sstrerror(e) strerror(e)
#endif /* WIN32 */
/* fopens the test case file */