From 70aa33c041b88573b32d67d0153c6472ce41ea8b Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Mon, 2 Feb 2009 14:41:44 +0000 Subject: Start with ssh agent implementation. This is work in progress. git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@200 7dcaeef0-15fb-0310-b436-a5af3365683c --- libssh/socket.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'libssh/socket.c') diff --git a/libssh/socket.c b/libssh/socket.c index 6765b36..d4d8e80 100644 --- a/libssh/socket.c +++ b/libssh/socket.c @@ -27,8 +27,10 @@ #ifdef _WIN32 #include #else +#include #include #include +#include #endif #include "libssh/priv.h" @@ -104,6 +106,35 @@ void ssh_socket_free(struct socket *s){ free(s); } +#ifndef _WIN32 +int ssh_socket_unix(struct socket *s, const char *path) { + struct sockaddr_un sunaddr; + + sunaddr.sun_family = AF_UNIX; + snprintf(sunaddr.sun_path, sizeof(sunaddr.sun_path), "%s", path); + + s->fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (s->fd < 0) { + return -1; + } + + if (fcntl(s->fd, F_SETFD, 1) == -1) { + close(s->fd); + s->fd = -1; + return -1; + } + + if (connect(s->fd, (struct sockaddr *) &sunaddr, + sizeof(sunaddr)) < 0) { + close(s->fd); + s->fd = -1; + return -1; + } + + return 0; +} +#endif + /* \internal * \brief closes a socket */ -- cgit