Index: snmp_api.c
===================================================================
--- snmp_api.c	(revision 17714)
+++ snmp_api.c	(working copy)
@@ -418,9 +418,16 @@
     Reqid = retVal;
     snmp_res_unlock(MT_LIBRARY_ID, MT_LIB_REQUESTID);
     if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_16BIT_IDS))
-        return (retVal & 0x7fff);	/* mask to 15 bits */
+        retVal &= 0x7fff;	/* mask to 15 bits */
     else
-        return (retVal & 0x7fffffff);	/* mask to 31 bits */
+        retVal &= 0x7fffffff;	/* mask to 31 bits */
+
+    if ( !retVal ) {
+        snmp_res_lock(MT_LIBRARY_ID, MT_LIB_REQUESTID);
+        Reqid = retVal = 2;
+        snmp_res_unlock(MT_LIBRARY_ID, MT_LIB_REQUESTID);
+    }
+    return retVal;
 }
 
 long
@@ -434,9 +441,16 @@
     Msgid = retVal;
     snmp_res_unlock(MT_LIBRARY_ID, MT_LIB_MESSAGEID);
     if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_16BIT_IDS))
-        return (retVal & 0x7fff);	/* mask to 15 bits */
+        retVal &= 0x7fff;	/* mask to 15 bits */
     else
-        return (retVal & 0x7fffffff);	/* mask to 31 bits */
+        retVal &= 0x7fffffff;	/* mask to 31 bits */
+
+    if ( !retVal ) {
+        snmp_res_lock(MT_LIBRARY_ID, MT_LIB_MESSAGEID);
+        Msgid = retVal = 2;
+        snmp_res_unlock(MT_LIBRARY_ID, MT_LIB_MESSAGEID);
+    }
+    return retVal;
 }
 
 long
@@ -450,9 +464,16 @@
     Sessid = retVal;
     snmp_res_unlock(MT_LIBRARY_ID, MT_LIB_SESSIONID);
     if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_16BIT_IDS))
-        return (retVal & 0x7fff);	/* mask to 15 bits */
+        retVal &= 0x7fff;	/* mask to 15 bits */
     else
-        return (retVal & 0x7fffffff);	/* mask to 31 bits */
+        retVal &= 0x7fffffff;	/* mask to 31 bits */
+
+    if ( !retVal ) {
+        snmp_res_lock(MT_LIBRARY_ID, MT_LIB_SESSIONID);
+        Sessid = retVal = 2;
+        snmp_res_unlock(MT_LIBRARY_ID, MT_LIB_SESSIONID);
+    }
+    return retVal;
 }
 
 long
@@ -466,9 +487,16 @@
     Transid = retVal;
     snmp_res_unlock(MT_LIBRARY_ID, MT_LIB_TRANSID);
     if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_16BIT_IDS))
-        return (retVal & 0x7fff);	/* mask to 15 bits */
+        retVal &= 0x7fff;	/* mask to 15 bits */
     else
-        return (retVal & 0x7fffffff);	/* mask to 31 bits */
+        retVal &= 0x7fffffff;	/* mask to 31 bits */
+
+    if ( !retVal ) {
+        snmp_res_lock(MT_LIBRARY_ID, MT_LIB_TRANSID);
+        Transid = retVal = 2;
+        snmp_res_unlock(MT_LIBRARY_ID, MT_LIB_TRANSID);
+    }
+    return retVal;
 }
 
 void
