X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=ctdlsalearn%2Fsrc%2Fsockets.c;fp=ctdlsalearn%2Fsrc%2Fsockets.c;h=05465467ac759aca052ef41efcbd5d967d6f29c3;hb=0eb2bdf5f6ed3f0d25da0226fbb92ad91003281d;hp=0000000000000000000000000000000000000000;hpb=fab6a9389e77f1546dfe620d96617ea164f8cdd6;p=citadel.git diff --git a/ctdlsalearn/src/sockets.c b/ctdlsalearn/src/sockets.c new file mode 100644 index 000000000..05465467a --- /dev/null +++ b/ctdlsalearn/src/sockets.c @@ -0,0 +1,182 @@ +/* + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ctdlsalearn.h" + +#ifndef INADDR_NONE +#define INADDR_NONE 0xffffffff +#endif + +int uds_connectsock(char *sockpath) +{ + struct sockaddr_un addr; + int s; + + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, sockpath, sizeof addr.sun_path); + + s = socket(AF_UNIX, SOCK_STREAM, 0); + if (s < 0) { + fprintf(stderr, "Can't create socket[%s]: %s\n", sockpath, strerror(errno)); + return(-1); + } + + if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + fprintf(stderr, "Can't connect [%s]: %s\n", sockpath, strerror(errno)); + close(s); + return(-1); + } + + return s; +} + + +/* + * sock_read_to() - input binary data from socket, with a settable timeout. + * Returns the number of bytes read, or -1 for error. + * If keep_reading_until_full is nonzero, we keep reading until we get the number of requested bytes + */ +int sock_read_to(int sock, char *buf, int bytes, int timeout, int keep_reading_until_full) +{ + int len,rlen; + fd_set rfds; + struct timeval tv; + int retval; + + len = 0; + while (len 0) + && ( (buf[i - 1]==13) + || ( buf[i - 1]==10)) ) { + i--; + buf[i] = 0; + } + return(i); +} + + + +/* + * sock_puts() - send line to server - implemented in terms of serv_write() + * Returns the number of bytes written, or -1 for error. + */ +int sock_puts(int sock, char *buf) +{ + int i, j; + + i = sock_write(sock, buf, strlen(buf)); + if (i<0) return(i); + j = sock_write(sock, "\n", 1); + if (j<0) return(j); + return(i+j); +} + + +void sock_printf(int sock, const char *format,...) +{ + va_list arg_ptr; + char buf[4096]; + size_t len; + + va_start(arg_ptr, format); + vsnprintf(buf, sizeof buf, format, arg_ptr); + va_end(arg_ptr); + + sock_write(sock, buf, strlen(buf)); +}