Mercurial > ~mikael > mcabber > hg
diff mcabber/libjabber/socket.c @ 417:c3ae9251c197
Sync libjabber with upstream
Sync with jabberd-1.4.4.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Thu, 01 Sep 2005 23:29:21 +0200 |
parents | bf3d6e241714 |
children | 5f43b532cc37 |
line wrap: on
line diff
--- a/mcabber/libjabber/socket.c Thu Sep 01 21:18:19 2005 +0200 +++ b/mcabber/libjabber/socket.c Thu Sep 01 23:29:21 2005 +0200 @@ -13,21 +13,40 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * Jabber - * Copyright (C) 1998-1999 The Jabber Team http://jabber.org/ + * Copyrights + * + * Portions created by or assigned to Jabber.com, Inc. are + * Copyright (c) 1999-2002 Jabber.com, Inc. All Rights Reserved. Contact + * information for Jabber.com, Inc. is available at http://www.jabber.com/. + * + * Portions Copyright (c) 1998-1999 Jeremie Miller. + * + * Acknowledgements + * + * Special thanks to the Jabber Open Source Contributors for their + * suggestions and support of Jabber. + * + */ + +/** + * @file socket.c + * @brief some misc functions to handle sockets */ #include "libxode.h" #include "connwrap.h" -/* socket.c - * +/** * Simple wrapper to make socket creation easy. - * type = NETSOCKET_SERVER is local listening socket - * type = NETSOCKET_CLIENT is connection socket - * type = NETSOCKET_UDP + * + * @param port port number of the socket + * @param host hostname where to connect to or listen on + * @param type type of socket (NETSOCKET_SERVER, NETSOCKET_CLIENT; or NETSOCKET_UDP) + * @return file handle of the new socket + * + * NETSOCKET_SERVER is local listening socket + * NETSOCKET_CLIENT is connection socket */ - int make_netsocket(u_short port, char *host, int type, int ssl) { int s, flag = 1; @@ -41,53 +60,53 @@ bzero((void *)&sa,sizeof(struct sockaddr_in)); if((s = socket(AF_INET,socket_type,0)) < 0) - return(-1); + return(-1); if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&flag, sizeof(flag)) < 0) - return(-1); + return(-1); saddr = make_addr(host); if(saddr == NULL) - return(-1); + return(-1); sa.sin_family = AF_INET; sa.sin_port = htons(port); if(type == NETSOCKET_SERVER) { - /* bind to specific address if specified */ - if(host != NULL) - sa.sin_addr.s_addr = saddr->s_addr; + /* bind to specific address if specified */ + if(host != NULL) + sa.sin_addr.s_addr = saddr->s_addr; - if(bind(s,(struct sockaddr*)&sa,sizeof sa) < 0) - { - close(s); - return(-1); - } + if(bind(s,(struct sockaddr*)&sa,sizeof sa) < 0) + { + close(s); + return(-1); + } } if(type == NETSOCKET_CLIENT) { - sa.sin_addr.s_addr = saddr->s_addr; - if(cw_connect(s,(struct sockaddr*)&sa,sizeof sa,ssl) < 0) - { - close(s); - return(-1); - } + sa.sin_addr.s_addr = saddr->s_addr; + if(cw_connect(s,(struct sockaddr*)&sa,sizeof sa,ssl) < 0) + { + close(s); + return(-1); + } } if(type == NETSOCKET_UDP) { - /* bind to all addresses for now */ - if(bind(s,(struct sockaddr*)&sa,sizeof sa) < 0) - { - close(s); - return(-1); - } + /* bind to all addresses for now */ + if(bind(s,(struct sockaddr*)&sa,sizeof sa) < 0) + { + close(s); + return(-1); + } - /* specify default recipient for read/write */ - sa.sin_addr.s_addr = saddr->s_addr; - if(cw_connect(s,(struct sockaddr*)&sa,sizeof sa,ssl) < 0) - { - close(s); - return(-1); - } + /* specify default recipient for read/write */ + sa.sin_addr.s_addr = saddr->s_addr; + if(cw_connect(s,(struct sockaddr*)&sa,sizeof sa,ssl) < 0) + { + close(s); + return(-1); + } } @@ -131,56 +150,56 @@ bzero((void *)&sa,sizeof(struct sockaddr_in)); if((s = socket(AF_INET,socket_type,0)) < 0) - return(-1); + return(-1); if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&flag, sizeof(flag)) < 0) - return(-1); + return(-1); change_socket_to_nonblocking(s); saddr = make_addr(host); if(saddr == NULL) - return(-1); + return(-1); sa.sin_family = AF_INET; sa.sin_port = htons(port); if(type == NETSOCKET_SERVER) { - /* bind to specific address if specified */ - if(host != NULL) - sa.sin_addr.s_addr = saddr->s_addr; + /* bind to specific address if specified */ + if(host != NULL) + sa.sin_addr.s_addr = saddr->s_addr; - if(bind(s,(struct sockaddr*)&sa,sizeof sa) < 0) - { - close(s); - return(-1); - } + if(bind(s,(struct sockaddr*)&sa,sizeof sa) < 0) + { + close(s); + return(-1); + } } if(type == NETSOCKET_CLIENT) { - int rc; - sa.sin_addr.s_addr = saddr->s_addr; - rc = cw_nb_connect(s,(struct sockaddr*)&sa,sizeof sa,ssl, state); - if (rc == -1 ) - { - close(s); - return(-1); - } + int rc; + sa.sin_addr.s_addr = saddr->s_addr; + rc = cw_nb_connect(s,(struct sockaddr*)&sa,sizeof sa,ssl, state); + if (rc == -1 ) + { + close(s); + return(-1); + } } if(type == NETSOCKET_UDP) { - /* bind to all addresses for now */ - if(bind(s,(struct sockaddr*)&sa,sizeof sa) < 0) - { - close(s); - return(-1); - } + /* bind to all addresses for now */ + if(bind(s,(struct sockaddr*)&sa,sizeof sa) < 0) + { + close(s); + return(-1); + } - /* specify default recipient for read/write */ - sa.sin_addr.s_addr = saddr->s_addr; - if(cw_connect(s,(struct sockaddr*)&sa,sizeof sa,ssl) < 0) - { - close(s); - return(-1); - } + /* specify default recipient for read/write */ + sa.sin_addr.s_addr = saddr->s_addr; + if(cw_connect(s,(struct sockaddr*)&sa,sizeof sa,ssl) < 0) + { + close(s); + return(-1); + } } @@ -193,32 +212,32 @@ static struct in_addr addr; char myname[MAXHOSTNAMELEN + 1]; - if(host == NULL || strlen(host) == 0) - { - gethostname(myname,MAXHOSTNAMELEN); - hp = gethostbyname(myname); - if(hp != NULL) - { - return (struct in_addr *) *hp->h_addr_list; - } - }else{ - addr.s_addr = inet_addr(host); - if(addr.s_addr != -1) - { - return &addr; - } - hp = gethostbyname(host); - if(hp != NULL) - { - return (struct in_addr *) *hp->h_addr_list; - } + if (host == NULL || strlen(host) == 0) { + gethostname(myname,MAXHOSTNAMELEN); + hp = gethostbyname(myname); + if(hp != NULL) { + return (struct in_addr *) *hp->h_addr_list; + } + } else { + addr.s_addr = inet_addr(host); + if(addr.s_addr != -1) { + return &addr; + } + hp = gethostbyname(host); + if(hp != NULL) { + return (struct in_addr *) *hp->h_addr_list; + } } return NULL; } -/* Sets a file descriptor to close on exec. "flag" is 1 to close on exec, 0 to - * leave open across exec. - * -- EJB 7/31/2000 +/** + * Sets a file descriptor to close on exec. + * + * @param fd the file descriptor + * @param flag 1 to close on exec, 0 to leave open across exec + * + * @deprecated this function is not used by jabberd14 and might be removed in future versions */ int set_fd_close_on_exec(int fd, int flag) { @@ -226,12 +245,12 @@ int newflags; if(flag) - newflags = oldflags | FD_CLOEXEC; + newflags = oldflags | FD_CLOEXEC; else - newflags = oldflags & (~FD_CLOEXEC); + newflags = oldflags & (~FD_CLOEXEC); if(newflags==oldflags) - return 0; + return 0; return fcntl(fd,F_SETFL,(long)newflags); }