* sockets for the Citadel client; for that you must look in ipc_c_tcp.c
* (which, uncoincidentally, bears a striking similarity to this file).
*
- * Copyright (c) 1987-2011 by the citadel.org team
+ * Copyright (c) 1987-2017 by the citadel.org team
*
* This program is open source software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License, version 3.
* GNU General Public License for more details.
*/
+#include <stdlib.h>
+#include <unistd.h>
+#include <netdb.h>
#include <stdio.h>
#include <libcitadel.h>
#include "ctdl_module.h"
for (ai = res; ai != NULL; ai = ai->ai_next) {
sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (sock < 0) {
- syslog(LOG_ERR, "socket() failed: %s", strerror(errno));
+ syslog(LOG_ERR, "%s: %m", host);
freeaddrinfo(res);
return(-1);
}
return(sock);
}
else {
- syslog(LOG_ERR, "connect() failed: %s", strerror(errno));
+ syslog(LOG_ERR, "%s: %m", host);
close(sock);
}
}
* 0 Request timed out.
* -1 Connection is broken, or other error.
*/
-int socket_read_blob(int *Socket, StrBuf * Target, int bytes, int timeout)
+int socket_read_blob(int *Socket, StrBuf *Target, int bytes, int timeout)
{
- CitContext *CCC = MyContext();
const char *Error;
int retval = 0;
-
- retval = StrBufReadBLOBBuffered(Target,
- CCC->SBuf.Buf,
- &CCC->SBuf.ReadWritePointer,
- Socket, 1, bytes, O_TERM, &Error);
-
+ retval = StrBufReadBLOBBuffered(Target, CC->SBuf.Buf, &CC->SBuf.ReadWritePointer, Socket, 1, bytes, O_TERM, &Error);
if (retval < 0) {
- syslog(LOG_CRIT, "socket_read_blob() failed: %s", Error);
+ syslog(LOG_ERR, "clientsocket: socket_read_blob() failed: %s", Error);
}
return retval;
}
-int CtdlSockGetLine(int *sock, StrBuf * Target, int nSec)
+int CtdlSockGetLine(int *sock, StrBuf *Target, int nSec)
{
CitContext *CCC = MyContext();
const char *Error;
CCC->SBuf.Buf,
&CCC->SBuf.ReadWritePointer,
sock, nSec, 1, &Error);
- if ((rc < 0) && (Error != NULL))
- syslog(LOG_CRIT, "CtdlSockGetLine() failed: %s", Error);
+ if ((rc < 0) && (Error != NULL)) {
+ syslog(LOG_ERR, "clientsocket: CtdlSockGetLine() failed: %s", Error);
+ }
return rc;
}
/*
* client_getln() ... Get a LF-terminated line of text from the client.
- * (This is implemented in terms of client_read() and could be
- * justifiably moved out of sysdep.c)
*/
int sock_getln(int *sock, char *buf, int bufsize)
{
FD_ZERO(&rfds);
FD_SET(*sock, &rfds);
if (select(*sock + 1, NULL, &rfds, NULL, &tv) == -1) {
-/// *Error = strerror(errno);
close (*sock);
*sock = -1;
return -1;
FD_ZERO(&rfds);
FD_SET(*sock, &rfds);
if (select(*sock + 1, NULL, &rfds, NULL, &tv) == -1) {
-/// *Error = strerror(errno);
close (*sock);
*sock = -1;
return -1;
}
-
/*
* client_getln() ... Get a LF-terminated line of text from the client.
- * (This is implemented in terms of client_read() and could be
- * justifiably moved out of sysdep.c)
*/
int sock_getln_err(int *sock, char *buf, int bufsize, int *rc, int nSec)
{
return i;
}
+
/*
* Multiline version of sock_gets() ... this is a convenience function for
* client side protocol implementations. It only returns the first line of