added ability to bind to a specific IP address for TCP server connections.
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 16 Aug 2005 15:09:32 +0000 (15:09 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 16 Aug 2005 15:09:32 +0000 (15:09 +0000)
TCP client code is now tested and appears to work

git-svn-id: svn://svn.open-ils.org/ILS/trunk@1662 dcc99617-32d9-48b4-a31d-7c20da2025e4

OpenSRF/src/utils/socket_bundle.c
OpenSRF/src/utils/socket_bundle.h

index 2ec5acd..c18534f 100644 (file)
@@ -82,7 +82,7 @@ socket_node* _socket_add_node(socket_manager* mgr,
 /* creates a new server socket node and adds it to the socket set.
        returns new socket fd on success.  -1 on failure.
        socket_type is one of INET or UNIX  */
-int socket_open_tcp_server(socket_manager* mgr, int port) {
+int socket_open_tcp_server(socket_manager* mgr, int port, char* listen_ip) {
 
        if( mgr == NULL ) return warning_handler("socket_open_tcp_server(): NULL mgr"); 
 
@@ -95,7 +95,13 @@ int socket_open_tcp_server(socket_manager* mgr, int port) {
                return warning_handler("tcp_server_connect(): Unable to create socket");
 
        server_addr.sin_family = AF_INET;
-       server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+
+       if(listen_ip != NULL) {
+               server_addr.sin_addr.s_addr = inet_addr(listen_ip);
+       } else {
+               server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+       }
+
        server_addr.sin_port = htons(port);
 
        if(bind( sock_fd, (struct sockaddr*) &server_addr, sizeof(server_addr)) < 0)
index 05c2863..25fc158 100644 (file)
@@ -70,7 +70,7 @@ void socket_manager_free(socket_manager* mgr);
 /* creates a new server socket node and adds it to the socket set.
        returns socket id on success.  -1 on failure.
        socket_type is one of INET or UNIX  */
-int socket_open_tcp_server(socket_manager*, int port);
+int socket_open_tcp_server(socket_manager*, int port, char* listen_ip );
 
 int socket_open_unix_server(socket_manager* mgr, char* path);