diff --git a/src/xpdev/multisock.c b/src/xpdev/multisock.c
index 17bd7458273353601f0dfa4a65a09952d80edc99..a74038cbc0360cfe47501ff0ff542c75d2ac9755 100644
--- a/src/xpdev/multisock.c
+++ b/src/xpdev/multisock.c
@@ -71,7 +71,7 @@ BOOL xpms_add(struct xpms_set *xpms_set, int domain, int type,
 	}
 
 	for(cur=res; cur; cur=cur->ai_next) {
-		new_socks=(struct xpms_sockdef *)realloc(xpms_set->socks, sizeof(struct xpms_set)*xpms_set->sock_count+1);
+		new_socks=(struct xpms_sockdef *)realloc(xpms_set->socks, sizeof(struct xpms_sockdef)*(xpms_set->sock_count+1));
 		if(new_socks==NULL) {
 			/* This may be a partial failure */
 			if(xpms_set->lprintf)
@@ -114,9 +114,9 @@ BOOL xpms_add(struct xpms_set *xpms_set, int domain, int type,
 				bind_init(TRUE);
 		}
 
-		if(!listen(xpms_set->socks[xpms_set->sock_count].sock, SOMAXCONN)) {
+		if(listen(xpms_set->socks[xpms_set->sock_count].sock, SOMAXCONN)==-1) {
 			if(xpms_set->lprintf)
-				xpms_set->lprintf(LOG_WARNING, "%04d !ERROR %d listen()ing op port %d"
+				xpms_set->lprintf(LOG_WARNING, "%04d !ERROR %d listen()ing on port %d"
 						, xpms_set->socks[xpms_set->sock_count].sock, ERROR_VALUE, port);
 			closesocket(xpms_set->socks[xpms_set->sock_count].sock);
 			FREE_AND_NULL(xpms_set->socks[xpms_set->sock_count].address);
diff --git a/src/xpdev/multisock.h b/src/xpdev/multisock.h
index c1980e97087ed4f37465a790eae18c0be9e9184a..ea73fa19e4dae01ee97cebdf97f0b7e5487d14fc 100644
--- a/src/xpdev/multisock.h
+++ b/src/xpdev/multisock.h
@@ -25,6 +25,10 @@ struct xpms_set {
 
 #define XPMS_FOREVER	UINT_MAX
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 struct xpms_set *xpms_create(unsigned int retries, unsigned int wait_secs,
 	int (*lprintf)(int level, const char *fmt, ...));
 void xpms_destroy(struct xpms_set *xpms_set);
@@ -34,4 +38,8 @@ BOOL xpms_add(struct xpms_set *xpms_set, int domain, int type,
 SOCKET xpms_accept(struct xpms_set *, struct sockaddr * addr, 
 	socklen_t * addrlen, unsigned int timeout, void **cb_data);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif