From f8290b0742c16a3a4d2ac12c97984e8b6f452a69 Mon Sep 17 00:00:00 2001 From: jdl Date: Tue, 27 May 2003 19:13:21 +0000 Subject: added broadcast socket options to htmsocket.c and some cleanup svn path=/trunk/externals/OSCx/; revision=659 --- OSC/htmsocket.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'OSC/htmsocket.c') diff --git a/OSC/htmsocket.c b/OSC/htmsocket.c index 9666ebe..cba230e 100644 --- a/OSC/htmsocket.c +++ b/OSC/htmsocket.c @@ -121,6 +121,7 @@ void *OpenHTMSocket(char *host, int portnumber) o = malloc(sizeof(*o)); if(!o) return 0; + int oval = 1; #ifndef WIN32 @@ -162,14 +163,14 @@ void *OpenHTMSocket(char *host, int portnumber) if (bind(sockfd, (struct sockaddr *) &ucl_addr, clilen) < 0) { - perror("client: can't bind local address"); - close(sockfd); - sockfd = -1; + perror("client: can't bind local address"); + close(sockfd); + sockfd = -1; } } else - perror("unable to make socket\n"); - + perror("unable to make socket\n"); + }else #endif @@ -228,6 +229,11 @@ void *OpenHTMSocket(char *host, int portnumber) cl_addr.sin_addr.s_addr = htonl(INADDR_ANY); cl_addr.sin_port = htons(0); + // enable broadcast + if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &oval, sizeof(int)) == -1) { + perror("setsockopt"); + } + if(bind(sockfd, (struct sockaddr *) &cl_addr, sizeof(cl_addr)) < 0) { perror("could not bind\n"); closesocket(sockfd); @@ -244,6 +250,11 @@ void *OpenHTMSocket(char *host, int portnumber) cl_addr.sin_addr.s_addr = htonl(INADDR_ANY); cl_addr.sin_port = htons(0); + // enable broadcast + if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &oval, sizeof(int)) == -1) { + perror("setsockopt"); + } + if(bind(sockfd, (struct sockaddr *) &cl_addr, sizeof(cl_addr)) < 0) { perror("could not bind\n"); close(sockfd); @@ -293,7 +304,11 @@ void CloseHTMSocket(void *htmsendhandle) return; } #else - close(o->sockfd); + if(close(o->sockfd) == -1) + { + perror("CloseHTMSocket::closesocket failed"); + return; + } #endif free(o); -- cgit v1.2.1