diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/snmp-engine.c | 18 | ||||
| -rw-r--r-- | common/snmp-engine.h | 2 | 
2 files changed, 11 insertions, 9 deletions
| diff --git a/common/snmp-engine.c b/common/snmp-engine.c index 0bfb77d..0c1aa87 100644 --- a/common/snmp-engine.c +++ b/common/snmp-engine.c @@ -940,9 +940,9 @@ snmp_engine_sync (const char* host, const char* community, int version,   */  void -snmp_engine_init (int retries) +snmp_engine_init (const char *bindaddr, int retries)  { -	struct sockaddr_in addr; +	struct sockaddr_any addr;  	snmp_retries = retries; @@ -954,16 +954,18 @@ snmp_engine_init (int retries)  	if (!snmp_preparing)  		err (1, "out of memory"); +	memset (&addr, 0, sizeof(addr)); +	if (!bindaddr) +		bindaddr = "0.0.0.0"; +	if (sock_any_pton (bindaddr, &addr, SANY_OPT_DEFPORT (0) | SANY_OPT_DEFANY) < 0) +		err (1, "couldn't parse bind address: %s", bindaddr); +  	ASSERT (snmp_socket == -1); -	snmp_socket = socket (PF_INET, SOCK_DGRAM, 0); +	snmp_socket = socket (SANY_TYPE (addr), SOCK_DGRAM, 0);  	if (snmp_socket < 0)  		err (1, "couldn't open snmp socket"); -	/* Get a random IPv4 UDP socket for client use */ -	memset (&addr, 0, sizeof(addr)); -	addr.sin_family = AF_INET; - -	if (bind (snmp_socket, (struct sockaddr*)&addr, sizeof (addr)) < 0) +	if (bind (snmp_socket, &SANY_ADDR (addr), SANY_LEN (addr)) < 0)  		err (1, "couldn't listen on port");  	if (server_watch (snmp_socket, SERVER_READ, request_response, NULL) == -1) diff --git a/common/snmp-engine.h b/common/snmp-engine.h index 36b2a3d..98a45e5 100644 --- a/common/snmp-engine.h +++ b/common/snmp-engine.h @@ -6,7 +6,7 @@  typedef void (*snmp_response) (int request, int code, struct snmp_value *value, void *data); -void snmp_engine_init (int retries); +void snmp_engine_init (const char *bind_address, int retries);  int  snmp_engine_request (const char* host, const char* community, int version,                            uint64_t interval, uint64_t timeout, int reqtype, | 
